2011-08-13 7 views
11

私は自分自身がアクセス修飾子と非アクセス修飾子の順番について混乱していることが分かりました。たとえば、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 
+0

実際の質問ではなく、正しい順序はありません。 – EJP

答えて

18

(簡体字):

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は有効ではありません。メソッドとフィールドの場合は同じですが、修飾子は型の前に現れなければなりません。ただ、英語の言語のように

+3

注:修飾子の順序は** valid **ですが、プロジェクト内のすべてのコードが一貫した順序を使用している場合は、コードを読む方が簡単です。このため、慣習的な注文があります(Java仕様8.3.1の終わりに小文字の文章があります)](http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html#jls-8.3.1)が広く採用されています。 Googleによる](https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.7-modifiers);多くのJavaツールがこの注文を推奨しています。 – ToolmakerSteve

+2

Java 8では、インタフェースメソッドの宣言に 'default'が追加されています。http://docs.oracle.com/javase/specs/jls/se8/html/jls-19.html#jls-19-9文法は 'public'と' abstract'の後に来ます。 –

2

修飾子はclassまたはタイプの前になります。 JavaLanguageSpecificationによると、修飾語の間の順序は関係ありません。

11

http://checkstyle.sourceforge.net/config_modifier.htmlを参照してください。

正しい(またはむしろ、従来の)順序である:

  1. 公共
  2. 保護
  3. プライベート
  4. 抽象
  5. 静的
  6. 最終
  7. 過渡
  8. 揮発性
  9. 同期
  10. ネイティブ
  11. strictfpの

Javaでプログラミングし、いくつかの日後にあなたの心に自然に来る必要があります。このため。

3

、形容詞(修飾子などなどpublicstaticvolatile、など)彼らが説明する名詞(classinterface、またはintまたはStringなどの任意の型)を先行します。修飾語の順序は言語には関係ありませんが、より自然な感じのコードをすぐに見つけることができます。