2015-01-14 40 views
6

我有簡單的枚舉類,如下所示。我想知道如何分配內存給每個常量(是爲每個常量創建成員類對象),它的範圍是什麼。Java枚舉,如何以及何時分配每個常量的內存

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

也許[枚舉JLS將幫助找到答案](http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html#jls-8.9) – gtgaxiola

+0

它們都是在類初始化時創建的。 –

+2

我不知道這個答案,但我知道你不需要字段'參數'或方法'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認爲枚舉類只能有固定數量的對象(對應於每個枚舉常量定義的對象)。所以枚舉幾乎像加載,初始化等類似行爲

+0

不回答問題。 – EJP