Java修饰符(抽象,最终,公共,静态等)的合理顺序是什么?


114

Java修饰符的合理顺序是什么?

  • 抽象
  • 最后
  • 本机
  • 私人的
  • 受保护的
  • 上市
  • 静态的
  • 严格的
  • 已同步
  • 短暂的
  • 易挥发的

更新资料

我已将措辞从“ 建议”更改为“ 合理”,以使讨论是否建议使用该命令平静下来。


丝毫没有关系,您不应该浪费太多时间为之苦恼。就我个人而言,我总是将访问修饰符放在第一位,但是在那之后我什至无法告诉您下一步要做什么。如果您想要参考,请在这里尝试,但我不确定在那里是否已指定参考。
洛恩侯爵

9
我想知道为什么这应该是一个“非建设性的”问题(关闭请求)。您可以在规范中找到建议(请参阅我的答案),并且遵循此建议将提高代码的可读性。如果您使用其他命令,则静态代码分析器(例如SONAR)将发出投诉。
FrVaBe

我再次查看了Oracle / Sun Java代码约定。甚至没有提到这个问题,在您应该看到的一个地方和您希望它出现的一个地方。
罗恩侯爵

@EJB代码约定来自1999年,强烈需要进行更新。我希望如果他们再次触及这些约定,那么他们将包括这个主题,因为这确实是一个好地方!
FrVaBe

1
Eclipse可以自动对修饰符进行排序吗?或者,如果未分类,至少发出警告?
罗兰

Answers:


126

Java语言规范(而非Java虚拟机规范)中提到了修饰符的习惯用法顺序,例如,对于类修饰符,您将找到以下定义(提取):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

ClassModifier: one of
    Annotation public protected private
    abstract static final strictfp

[....]

如果两个或更多个(不同的)类修饰符出现在类声明中,则习惯上尽管不是必需的,但它们的出现顺序与上面在ClassModifier生产中显示的顺序一致。(该段落底部的小文本!)

您可以在指定修饰符使用的其他几个地方找到该句子,例如此处用于字段修饰符。

更新:我将“指定/推荐”替换为“常规”,以使其成为可以接受的答案。如果您阅读注释,请考虑到这一点;-)(感谢@EJP使其清楚)-尽管如此,还是建议您使用习惯顺序。

Google还建议使用Java规范中提到的习惯顺序。

public / protected / private 
abstract 
static 
final 
transient 
volatile 
synchronized 
native 
strictfp

更新:OpenJDK社区中的项目有一个新的“ Java样式指南 ”倡议。它还对修饰符顺序提出了建议,还包括Java 8的新默认修饰符。

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp

1
问题是“ Java修饰符的推荐顺序是什么?” 并且在语言规范中回答了这个问题(并且由于不需要顺序,我会说它在规范中是推荐的)。JVM规范是关于类文件格式的,而不是关于Java源代码的。-的确,顺序并不重要,但是如果您遵循建议,您的代码将对其他人更易读。因此,我认为这是一个合理的问题,可以给出准确的答案。顺便说一句-静态代码分析器(例如SONAR)将对错误的顺序进行说明。
2013年

3
句子如果两个或多个(不同)类改性剂出现在类声明,那么它是常规的,虽然不是必需的,它们出现在与上述在生产用于ClassModifier所示相一致的顺序。是规范的一部分!
2013年

1
在这种情况下,我想大声喊叫,但我已经冷静下来-对此感到抱歉;-)-我也不是本地人-因此您在语言解释方面可能是正确的。我想在回答中说的是,在一个非常正式的地方,处理了Java源代码中的修饰符的顺序-当我对自己问同样的问题时,我很幸运能找到这个。恕我直言,没有比Java语言规范更好的找到答案的地方了。
2013年


1
@EJP您对该主题有很强的见解(〜无推荐顺序)。您愿意提供这个答案吗?我对投票感到好奇。
2013年

28

根据Java虚拟机规范表4.4使用命令是合理的

  • 上市
  • 受保护的
  • 私人的
  • 抽象
  • 默认
  • 静态的
  • 最后
  • 短暂的
  • 易挥发的
  • 已同步
  • 本机
  • 严格的

8
您经常会看到+1:“公共摘要”,“私有静态最终”等。某些IDE(例如NetBeans)甚至具有一些快捷方式,例如“ psf”或“ Psf”
Puce,

1
您可以在Java语言规范(而不是Java虚拟机规范!)中找到推荐的顺序。看看我的答案。
2013年

1
@FrVaBe您找不到这样的东西。不要将语言语法与样式建议混淆。
罗恩侯爵

@Puce:某些IDE(例如IntelliJ IDEA)甚至可以正确地对修饰符进行排序。
Mot


0

我使用两个规则来记住修饰符序列,但其中不包含strictfp,因为我从未使用过它。仅供参考。

  1. 同步本地人是最不优先的人。

  2. PPP AS FTV:PPP {噪声} AS {观看} FTV {France TV}。

:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.