关于静态方法的Java编码约定

这是一个非常简单的问题,但我认为这有点争议。

当我编写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 } 

在后者的情况下,我在构造函数之前使用某些方法感到不舒服。 哪一个是更广泛使用的惯例?

我相信Sun的(现在的甲骨文)Java编码标准被更广泛地使用。 这也是你目前正在使用的。

来自Java TM编程语言的代码约定 :

3.1.3类和接口声明

下表按其应显示的顺序描述了类或接口声明的各个部分。

  1. 类/接口文档注释(/ * /)
  2. classinterface语句
  3. 必要时,类/接口实现注释(/ /)
  4. 类( static )变量
  5. 实例变量
  6. 构造函数
  7. 方法

我个人使用选项2(实例元素和结构之前的静态字段和方法)。 对我来说,这在扫描文件时是有意义的,因为从类的用户,我可以访问静态的东西而不需要实例。 因此很高兴在构造函数之前看到它们,因为在使用静态东西时我并不关心构造函数。

仅供记录,这来自您链接的GWT文章:

我们承认存在许多很好的方法。 我们只是尝试选择一个至少与Sun的Java编码约定一致的…

所以他们使用的风格

  1. 建议GWT不用于一般用途
  2. 与标准惯例略有不同
  3. 被公认为是众多优秀标准之一

所以我要说,如果没有理由不坚持你现在的惯例,为什么要改变它们呢?

Java代码约定建议如下(基本上就是你已经做过的):

  • 类(静态)变量:首先是公共类变量,然后是受保护的,然后是包级别(无访问修饰符),然后是私有
  • 实例变量:首先是public,然后是protected,然后是包级别(无访问修饰符),然后是私有
  • 构造函数
  • 方法:这些方法应按function分组,而不是按范围或可访问性分组。 例如,私有类方法可以位于两个公共实例方法之间。 目标是使阅读和理解代码更容易。

我不知道,但是为了它的价值,我会做你做的。 顶部的构造函数,下面按function分组的方法(不考虑静态性)。 静态方法倾向于分组。

我打算使用静态工厂方法而不是构造函数 – 例如,它们在构造函数之前,而ctors是私有/受保护的。

这当然是一个偏好的问题……

您的约定更符合Javadoc中的默认排序(即混合在一起的静态和非静态方法)。 这也是我通常做的事情。

然而,内部类通常放在类的底部,因为它们通常是“辅助”或“辅助”类,将它们放在外部类的主要部分之前似乎很奇怪。

我在构造函数之前放置了静态初始化器和方法,所以我想我正在按照你的引用。

为什么不舒服? 这似乎是一件小事。