这是一个非常简单的问题,但我认为这有点争议。
当我编写Java类时,我使用以下顺序。
class Foo {
// static fields
// instance fields
// constructors
// methods (non-static and static methods are mixed but sorted based on their functionalities)
}
我读了一篇文章说:
(来自http://code.google.com/webtoolkit/makinggwtbetter.html#codestyle)
Java类型应具有以下成员顺序:
嵌套类型(混合内部和静态类是可以的)
静电场
静态初始化器
静态方法
实例字段
实例初始化器
构造函数
实例方法
如果我遵循该文章,则上述顺序应为
class Foo {
// static fields
// static methods
// instance fields
// constructors
// instance methods
}
在后者的情况下,我在构造函数之前使用某些方法感到不舒服。 哪一个是更广泛使用的惯例?
答案 0 :(得分:21)
我相信Sun(现在是甲骨文)的Java编码标准被更广泛地使用。这也是你目前正在使用的。
来自Code Conventions for the Java TM Programming Language :
3.1.3类和接口声明
下表按顺序描述了类或接口声明的各个部分 应该出现。
- 课程/界面文档注释(/*.../)
class
或interface
声明- 课程/界面实施评论(/.../,如有必要)
- 类(
static
)变量- 实例变量
- 构造
- 方法
醇>
答案 1 :(得分:4)
我个人使用选项2(实例元素和构造之前的静态字段和方法)。对我来说,这在扫描文件时是有意义的,因为从类的用户,我可以访问静态的东西而不需要实例。因此很高兴在构造函数之前看到它们,因为在使用静态东西时我并不关心构造函数。
答案 2 :(得分:3)
仅供记录,这来自您链接的GWT文章:
我们承认存在许多很好的方法。我们只是试图选择一个至少与Sun的Java编码约定一致的...
所以他们使用的风格
所以我会说,如果没有理由不坚持你现在的惯例,为什么要改变它们呢?
答案 3 :(得分:2)
Java Code Conventions建议如下(基本上就是你已经做过的):
答案 4 :(得分:0)
我不知道,但是为了它的价值,我会做你做的。顶部的构造函数,下面按功能分组的方法(不考虑静态性)。静态方法倾向于分组。
异常是我打算使用的静态工厂方法而不是构造函数 - 如果是这样,它们在构造函数之前,而ctors是私有/受保护的。
答案 5 :(得分:0)
这当然是一个偏好的问题......
您的约定更符合Javadoc中的默认排序(即混合在一起的静态和非静态方法)。这也是我通常做的事情。
然而,内部类通常放在类的底部,因为它们通常是“辅助”类或“辅助”类,将它们放在之前是外部的主要部分似乎很奇怪类。
答案 6 :(得分:0)
我在构造函数之前放置了静态初始化器和方法,所以我想我正在关注你的引用。
为什么会有不适?这似乎是一件小事。