2015-01-14 18 views
6

Ho una semplice classe enum come indicato di seguito. Voglio sapere come viene allocata la memoria a ciascuna costante (l'oggetto della classe Member viene creato per ogni costante) e qual è il suo ambito.enum Java, come e quando la memoria allocata per costante

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

Forse [Enum JLS aiuterà a trovare le risposte] (http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html # jls-8.9) – gtgaxiola

+0

Sono tutti creati sull'inizializzazione della classe. –

+2

Non conosco la risposta a questo, ma so che non è necessario il campo 'argument' o il metodo' getValue() '. Il metodo 'name()' lo fa già. –

risposta

5

I membri HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL"); sono create quando la classe enum viene caricata (cioè la loro portata è statico). Le enumerazioni vengono compilate in classi normali che si estendono java.lang.Enum e le relative istanze vengono allocate nell'heap come gli altri oggetti di classe.

Ogni membro richiama il costruttore definito nell'enumerazione che utilizza il parametro stringa.

Questo è dal relevant section in the Java Language Specification:

Una costante di enumerazione può essere seguita con argomenti, che vengono passati al costruttore del tipo enum quando si crea il costante durante l'inizializzazione classe, come descritto più avanti in questa sezione. Il costruttore da invocare viene scelto utilizzando le normali regole di sovraccarico (§15.12.2). Se gli argomenti sono omessi, viene assunto un elenco di argomenti vuoto.

+3

... e le istanze vivono nell'heap, proprio come tutti gli altri oggetti Java. – aioobe

0

Per tutti gli scopi pratici, java considera enum come una classe che può avere solo un numero fisso di oggetti (un oggetto corrispondente a ciascuna costante enum definita). Quindi enum è praticamente una classe di caricamento, inizializzazione, ecc.

+0

Non risponde alla domanda. – EJP

Problemi correlati