It is a very simple question, but I think it is a little bit controversial.
When I code Java classes I use the following order.
class Foo {
// stati
It's all a matter of preference, of course...
Your convention is more consistent with the default ordering in Javadoc (i.e. static and non-static methods mixed together). This is what I normally do, too.
However, inner classes are often placed at the bottom of a class as they are often 'secondary' or 'helper' classes, and it seems odd to put them before the main meat of the outer class.
I don't know, but for what it's worth, I do what you do. Constructors on top, methods grouped by functionality (with no regard to staticness) below. Static methods tend to group.
The exception is static factory methods that I intend for you to use instead of constructors -- if so, they are before constructors, and the ctors are private/protected.
Just for the record, this is from the GWT article you linked:
We acknowledge that plenty of great approaches exist out there. We're simply trying to pick one that is at least somewhat consistent with Sun's Java coding conventions...
So the style they use
So I'd say, if there's no reason not to stick with your current conventions, why change them?
The Java Code Conventions suggest the following (which is basically what you already do):
I believe Sun's (now Oracle's) Java coding standards are more widely used. This is what you are currently using too.
From Code Conventions for the Java TM Programming Language :
3.1.3 Class and Interface Declarations
The following table describes the parts of a class or interface declaration, in the order that they should appear.
- Class/interface documentation comment ( /*.../)
class
orinterface
statement- Class/interface implementation comment ( /.../), if necessary
- Class (
static
) variables- Instance variables
- Constructors
- Methods
Personally I use option 2 (static fields and methods prior to instance elements and constructs). To me this makes sense when scanning a file because from a user of a class, I can access the static stuff without needing an instance. Therefore it is nice to see them prior to the constructors because I don't care about constructors when using static stuff.