【问题标题】:class attributes declaration, order of the attributes' properties (final, private, static, type)类属性声明,属性属性的顺序(最终、私有、静态、类型)
【发布时间】:2011-02-18 12:14:49
【问题描述】:

我正在尝试查找有关对类属性(例如私有/受保护/公共、最终、静态、类型)的属性进行排序的最佳方式的文档。

我将发布一个示例以了解我的意思。

class A {

  public final static int FOO = 3;

  final public static int FOO = 3;

}

好的,我假设属性类型(int、String、char)位于属性名称之前。

我真正的疑问是当我尝试定位 static、final 和 v

【问题讨论】:

    标签: java class properties


    【解决方案1】:

    语言规范只说修饰符必须在类型之前,因此int 排在最后。 修饰符包括类型参数、注释、访问修饰符(private、protected、public)、static、final、synchronized、strictfp、volatile、transient 和它们(来自“允许编译器的内容” ) 可以按任何顺序出现。

    几天前我在谷歌搜索,static final 比final static 更频繁,所以这有助于订购它们:-)

    我认为一般来说这种修饰符的顺序是最常见的:

    1. 注释
    2. 类型参数
    3. 访问修饰符
    4. static
    5. final
    6. transient(仅限字段)
    7. volatile(仅适用于变量)
    8. synchronized(仅用于方法)

    我从未使用过strictfp 或native,但我想我会将它们放在synchronized 周围。

    【讨论】:

    • 我忘记了瞬态和易失性(直到我刚刚在我的项目中使用它们,因此记住了这个答案)。还有native,用于方法。
    【解决方案2】:

    您可以将默认顺序作为 Java 语言规范中出现的顺序。 http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#29882

    【讨论】:

      【解决方案3】:

      当我关心时,我根据 checkstyle 的 ModifierOrder 检查 [1](引用自链接页面)进行排序:

      检查修饰符的顺序是否符合 Java 语言规范,第 8.1.1、8.3.1 和 8.4.3 节。这 正确的顺序是:

      1. 公开
      2. 受保护
      3. 私人
      4. 摘要
      5. 静态
      6. 最终
      7. 瞬态
      8. 易变
      9. 同步
      10. 原生
      11. strictfp

      [1]http://checkstyle.sourceforge.net/config_modifier.html

      【讨论】:

        【解决方案4】:

        回答了你自己的问题:

        私有/受保护/公共、静态、最终、类型

        【讨论】:

        • 我不同意 ;-) 我更喜欢public static final。
        【解决方案5】:

        字段(类、方法)修饰符的顺序无关紧要。当我们查看方法签名时,它们只是标志。

        所以如果你想使用一个固定的顺序,它只是为了可读性。如果您始终在编译单元中使用相同的顺序,您的代码看起来会更好。

        但同样,顺序对字节码没有影响。忘记微优化;)

        【讨论】:

          猜你喜欢
          • 2010-11-27
          • 1970-01-01
          • 1970-01-01
          • 2018-09-06
          • 2015-07-19
          • 2017-06-07
          • 2015-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多