在section 8.1.1 Class Modifiers of the Java Language Specification 8,它指出:指定多个类修饰符
ClassModifier:
之一 注释公众保护私人抽象静态最终strictfp
但我设法编译如下:
public strictfp A{}
也就是说,应该选择其中一个类别修饰符,但我可以选择多个类别修饰符。我在这里误解了规范吗?
在section 8.1.1 Class Modifiers of the Java Language Specification 8,它指出:指定多个类修饰符
ClassModifier:
之一 注释公众保护私人抽象静态最终strictfp
但我设法编译如下:
public strictfp A{}
也就是说,应该选择其中一个类别修饰符,但我可以选择多个类别修饰符。我在这里误解了规范吗?
答案是在上面的规则之前更ClassModifier:
ClassModifiers:
ClassModifier
ClassModifiers ClassModifier <<== Here
ClassModifier: one of
Annotation public protected private abstract static final strictfp
从本质上讲,规则说您可以在ClassModifiers
列表中使用一个或多个ClassModifier
。这种“一个或多个”迭代概念的递归定义对于BNF风格的语法描述(与提供重复特殊语法的EBNF相反)是很常见的。
对不起,我需要更多的解释。如果我查看NormalClassDeclaration,则表示{ClassModifier}不是ClassModifers(即复数形式)。请解释我应该如何阅读。 –
@ I.K。 '''
谢谢。得到它了。 –
的ClassModifiers Java Language Specification准确地告诉:
ClassModifiers:
ClassModifier
ClassModifiers ClassModifier
ClassModifier: one of
Annotation public protected private
abstract static final strictfp
所以这是1个或类
你读过三行吗? “一个类的声明可能包括类修饰符。ClassModifiers: ClassModifier ClassModifiers ClassModifier” – SMA
我相信你的意思是java7,在java8它没有说明 – msrd0
@ msrd0 java 8 JLS没有上面的线。请参阅[这里](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1)所以OP读SE 7的JLS并假设其为8。 – SMA