【问题标题】:Modifier Keyword order in JavaJava中的修饰符关键字顺序
【发布时间】:2019-08-19 09:00:09
【问题描述】:

每次我在 Java 中使用比public void 更多的关键字编写方法时,每次我都以另一种方式编写它。有时是“static public void”有时是“public static void”等等。

这些关键字的最佳顺序(最佳做法)是什么?

[abstract/static] [final] [synchronized] [public/private/protected] [result_type] ???

【问题讨论】:

  • 听起来像是我的一个问题,被引导到programmers.stackexchange.com...但我个人使用[public/private/protected] [final/abstract/static] [synchronized] [type] func()...

标签: java syntax coding-style access-modifiers


【解决方案1】:

理论上讲 public static final 还是 final static public 都没有关系,但是如果你遵循通常的约定,其他人将能够更容易地阅读你的代码。这是首选顺序:

[公开|受保护 |私人]

静态

抽象

同步

[瞬态|易变]

最终

原生

严格的

[ 整数 |长 |字符串 |班级 |枚举 |接口等]

【讨论】:

  • @YoushaAleayoub 在提供的 JLS 部分,它没有说明任何关于订单限制的内容,例如 It is compile time error, if you do not follow above order. :)
  • 我认为静态和抽象的顺序是根据docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.3交换的。要去编辑它..
  • @11thHourWorker:考虑到staticabstract 不能同时出现在一个声明中,它们的相互顺序无关紧要。
  • @Joey, class Outer { static abstract class Inner {} }
  • @MikeSamuel:啊,好点子。我在 C# 中花了太多时间来记住这些怪癖;-)(我不记得曾经有一个抽象的静态内部类......)
【解决方案2】:

Checkstyle(它实现了 Java 语言规范部分的建议,8.1.18.3.18.4.3)说:

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

【讨论】:

  • 1.-3。永远不可能同时出现,所以它们应该放在首位。
  • @KonradHöffner,不,这样更清楚。尽管技术性很强,但我希望有一个列表,我可以在视觉上只在一个维度上进行选择。你不能拥有,比如说,public protected 的事实是没有实际意义的。这是关于整体排序,不是关于允许一起使用的内容。明智的配对是针对语言的 BNF(等),而不是这个问题。
【解决方案3】:

Java Language Specification 中提到了修饰符的自定义使用顺序(因此无需有自己的意见;-))例如对于method modifiers,您将找到以下定义(摘录):

MethodModifiers:
    MethodModifier
    MethodModifiers MethodModifier

MethodModifier: one of
    Annotation public protected private abstract
    static final synchronized native strictfp

如果两个或多个(不同的)方法修饰符出现在方法声明中,尽管不是必需的,但习惯上它们的出现顺序与上面 MethodModifier 产生式中显示的顺序一致。

您会在其他几个指定使用修饰符的地方找到这句话,例如here 用于字段修饰符。

(这主要是从我的另一个答案 here 复制的)。

【讨论】:

    【解决方案4】:

    “最好的”是遵循Java Coding Style Guide,在 6.2(方法声明)中声明:

    public static final synchronized long methodName()
        throws ArithmeticException, InterruptedException {
        static int count;
    }
    

    【讨论】:

    • 链接目前没有指向有用的页面,只是指向 oracle 的 java 主页。
    • @CoatedMoose 修复了链接
    【解决方案5】:

    最好的顺序是其余代码使用的顺序。

    【讨论】:

    • 是的,但你不能否认public static finalpublic final static 更常见。有一些不成文的约定。
    • 确实,Javaland 中有一些非常明确的约定,例如带有 infixCaps 风格的命名方法。值得学习和关注。
    • 很多代码都是团队开发的。所以,请遵守官方约定。
    【解决方案6】:

    像这样:

    public static final synchronized void calculate()

    【讨论】:

    • public static final synchronized void calculate() ;-)
    【解决方案7】:

    是的,有一个标准的排序。

    如果您使用 IDE,您可以设置它来为您格式化代码,即在 Eclipse 中的 Preferences -> Java -> Editor -> Save Actions 中,您可以选中“Format source code”框

    那你就不用再担心了。只要文件被保存,它就会自动完成,如果你的整个项目都使用它,那么整个项目的代码都以相同的方式格式化。

    【讨论】:

    【解决方案8】:

    这是我个人的选择

    public static final void method() { }
    public void method() { }
    public abstract void method() { }
    

    这似乎也符合 java 文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多