2011-11-25 5 views
10
enum Animals{ 
    DOG("woof"), 
    CAT("Meow"), 
    FISH("Burble"); 

    String sound; 

    Animals(String s) { 
      sound = s; 
    } 
} 
public class TestEnum{ 
    static Animals a; 
    public static void main(String ab[]){ 
     System.out.println(a); 
     System.out.println(a.DOG.sound + " " + a.FISH.sound); 
    } 
} 

上記の例では、aがヌルでenumがstaticとして宣言されていない場合、なぜenumのインスタンスにアクセスできますか(つまりa.DOG.sound)? 列挙型インスタンスはデフォルトで静的ですか?デフォルトでenumのインスタンスは静的ですか?

+0

enum値と 'static'の唯一の違いは、enum値の前に' static {} 'ブロックを置くことができないことです。 –

+2

この質問にscjpというタグが付いているのはなぜですか? – OldCurmudgeon

答えて

22

数値は暗黙的にpublic static finalです。静的解像度参照タイプ、ないインスタンスを使用しています。

は、あなたがnullの場合でも、なぜならあなたはかもしれアクセス静的メンバーインスタンスの参照を介してa.DOGを参照することができます。

I ではありません。それは誤解を招いています。大会では、(インスタンスではなく)タイプの静的参照が優先されます。

インスタンスを介してクラス変数に関してJLS 6.5.6.2を参照してください。 nullと動作する理由については、JLS 15.11を参照してください。簡単に言えば、これは参照型であり、インスタンスではなく、統計が解決されます。


更新リンク:/

JSE 6

JSE 7

JSE 8

6

はい、列挙型は事実上静的です。

関連する問題