Java修饰语法和格式

我发现自己对访问和非访问修饰符的顺序感到困惑。 例如

abstract void go() abstract public void go() public final void go() void final go() final class Test{} class final Test{} final abstract class Test{} abstract final Test{} 

我永远不知道正确的顺序是什么,有时我错了,因为有这么多可能的组合。 有一个明确的指导,哪一个应该先于另一个呢?

对代码中显示的格式和顺序是否有任何描述? 我试图拿出一个语法指南,但我不知道它是否是100%正确的。 这里是:

 Methods: [access modifier | nonaccess modifier] return-type method-name Classes: [access modifier | nonaccess modifier] class class-name Interfaces: [access modifier | nonaccess modifier] interface interface-name Variables: [access modifier | nonaccess modifier] variable-type variale-name 

从Java编程语言(简体)的官方语法

 Modifier: Annotation | public | protected | private static | abstract | final | native | synchronized transient | volatile | strictfp ClassOrInterfaceDeclaration: {Modifier} (ClassDeclaration | InterfaceDeclaration) ClassBodyDeclaration: {Modifier} MethodOrFieldDecl MethodOrFieldDecl: Type Identifier MethodOrFieldRest 

所以,对于类和接口,修饰符必须始终出现在class关键字之前,并且以任何顺序出现。 例如, final public class是有效的,但是class final不是。 对于方法和字段来说,它是一样的,但修饰符必须出现在types之前。

请参阅http://checkstyle.sourceforge.net/config_modifier.html

正确的(或者说,传统的)顺序是:

  1. 上市
  2. 保护
  3. 私人的
  4. 抽象
  5. 静态的
  6. 最后
  7. 短暂的
  8. 挥发物
  9. 同步
  10. 本地人
  11. strictfp

在Java编程几天之后,这个顺序应该会自然而然地出现在你的脑海里。

就像在英语中一样,形容词(修饰符如publicstaticvolatile等)在它们所描述的名词( classinterface或任何types如intString )之前。 修饰符的顺序与语言无关,但通过阅读代码,您将很快find更自然的感觉。

修饰符在class或types之前。 根据Java 语言 规范 ,修饰符之间的顺序并不重要。

是的,有Java语言规范 ,它解释了语言中所有有效的语法,还有Oracle / Sun使用的编码约定 ,这有点旧 ,但仍然解释了很多东西。