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 。
正确的(或者说,传统的)顺序是:
- 上市
- 保护
- 私人的
- 抽象
- 静态的
- 最后
- 短暂的
- 挥发物
- 同步
- 本地人
- strictfp
在Java编程几天之后,这个顺序应该会自然而然地出现在你的脑海里。
就像在英语中一样,形容词(修饰符如public
, static
, volatile
等)在它们所描述的名词( class
, interface
或任何types如int
或String
)之前。 修饰符的顺序与语言无关,但通过阅读代码,您将很快find更自然的感觉。
修饰符在class
或types之前。 根据Java 语言 规范 ,修饰符之间的顺序并不重要。
是的,有Java语言规范 ,它解释了语言中所有有效的语法,还有Oracle / Sun使用的编码约定 ,这有点旧 ,但仍然解释了很多东西。