2014-12-23 37 views
1

section 8.1.1 Class Modifiers of the Java Language Specification 8,它指出:指定多個類修飾符

ClassModifier


之一        註釋公衆保護私人抽象靜態最終strictfp

但我設法編譯如下:

public strictfp A{} 

也就是說,應該選擇其中一個類別修飾符,但我可以選擇多個類別修飾符。我在這裏誤解了規範嗎?

+3

你讀過三行嗎? 「一個類的聲明可能包括類修飾符。ClassModifiers: ClassModifier ClassModifiers ClassModifier」 – SMA

+0

我相信你的意思是java7,在java8它沒有說明 – msrd0

+0

@ 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

回答

6

答案是在上面的規則之前更ClassModifier:

ClassModifiers: 
    ClassModifier 
    ClassModifiers ClassModifier <<== Here 

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

從本質上講,規則說您可以在ClassModifiers列表中使用一個或多個ClassModifier。這種「一個或多個」迭代概念的遞歸定義對於BNF風格的語法描述(與提供重複特殊語法的EBNF相反)是很常見的。

+0

對不起,我需要更多的解釋。如果我查看NormalClassDeclaration,則表示{ClassModifier}不是ClassModifers(即複數形式)。請解釋我應該如何閱讀。 –

+0

@ I.K。 '''''''表示「零次或多次重複」。這是EBNF風格。方括號'['']'表示「可選」。但奇怪的是,他們混合了這兩種風格。 – dasblinkenlight

+0

謝謝。得到它了。 –