2015-01-14 7 views
6

私は以下のような簡単な列挙型を持っています。私は、各定数にどのようにメモリが割り当てられているかを知りたい(メンバクラスオブジェクトは各定数に対して作成される)とそのスコープは何か。Javaのenum、定数とメモリの割り当て方法と回数

public enum Member { 
    HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL"); 
    private String argument; 

    Member(String arguments) 
    { 
     System.out.println("Enum Constructor work"); 
     this.argument = arguments; 

    } 
    public String getValue() { 
     return argument; 
    } 

} 
+0

[Enum JLSが回答を見つけるのに役立ちます](http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html#jls-8.9) – gtgaxiola

+0

これらはすべてクラスの初期化時に作成されます。 –

+2

私はこれに対する答えは分かりませんが、フィールド 'argument'やメソッド' getValue() 'は必要ないことは分かります。メソッド 'name()'は既にそれを行います。 –

答えて

5

部材HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL");を列挙クラスがロードされるときに作成される(すなわち、その範囲が静的です)。列挙型は通常のクラスにコンパイルされ、java.lang.Enumに拡張され、そのインスタンスは他のクラスオブジェクトのようにヒープに割り当てられます。

各メンバーは、文字列パラメータを取る列挙型で定義されたコンストラクタを呼び出します。

これはrelevant section in the Java Language Specificationからのものである:

列挙定数は、このセクションで後述するように定数がクラスの初期化時に作成されたときに列挙型のコンストラクタに渡される引数が続いてもよいです。呼び出されるコンストラクタは、通常のオーバーロード規則(15.12.2)を使用して選択されます。引数を省略すると、空の引数リストが仮定されます。

+3

...他のすべてのJavaオブジェクトと同じように、インスタンスはヒープ上に存在します。 – aioobe

0

実際には、javaはenumを、固定数のオブジェクト(定義された各列挙定数に対応するオブジェクト)のみを持つクラスと見なします。したがってenumは、読み込み、初期化などのクラスのようなものです。

+0

質問に答えません。 – EJP

関連する問題