Java中的修饰符关键字顺序
Posted
技术标签:
【中文标题】Java中的修饰符关键字顺序【英文标题】:Modifier Keyword order in Java 【发布时间】:2012-05-05 03:47:30 【问题描述】:每次我在 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()
...
【参考方案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:考虑到static
和abstract
不能同时出现在一个声明中,它们的相互顺序无关紧要。
@Joey, class Outer static abstract class Inner
@MikeSamuel:啊,好点子。我在 C# 中花了太多时间来记住这些怪癖;-)(我不记得曾经有一个抽象的静态内部类......)【参考方案2】:
Checkstyle(它实现了 Java 语言规范部分的建议,8.1.1、8.3.1 和 8.4.3)说:
-
公开
受保护
私人
摘要
默认
静态
最终
瞬态
易变
同步
原生
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 final
比public 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”框
那你就不用再担心了。只要文件被保存,它就会自动完成,如果你的整个项目都使用它,那么整个项目的代码都以相同的方式格式化。
【讨论】:
这不会重新排序修饰符 AFAIK。见bugs.eclipse.org/bugs/show_bug.cgi?id=322494【参考方案8】:这是我个人的选择
public static final void method()
public void method()
public abstract void method()
这似乎也符合 java 文档
【讨论】:
以上是关于Java中的修饰符关键字顺序的主要内容,如果未能解决你的问题,请参考以下文章