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

时间:2011-09-23 14:25:15

标签: java coding-style convention

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

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

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

7 个答案:

答案 0 :(得分:21)

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

来自Code Conventions for the Java TM Programming Language

  

3.1.3类和接口声明

     

下表按顺序描述了类或接口声明的各个部分   应该出现。

     
      
  1. 课程/界面文档注释(/*.../)
  2.   
  3. classinterface声明
  4.   
  5. 课程/界面实施评论(/.../,如有必要)
  6.   
  7. 类(static)变量
  8.   
  9. 实例变量
  10.   
  11. 构造
  12.   
  13. 方法
  14.   

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

  

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

所以他们使用的风格

  1. 建议用于GWT而不是一般用途
  2. 略微偏离标准惯例
  3. 被认为是众多优秀标准之一
  4. 所以我会说,如果没有理由不坚持你现在的惯例,为什么要改变它们呢?

答案 3 :(得分:2)

Java Code Conventions建议如下(基本上就是你已经做过的):

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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

为什么会有不适?这似乎是一件小事。