2011-11-25 7 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); 
    } 
} 

En el ejemplo anterior, ¿por qué podemos acceder a instancias de la enumeración (es decir, como un sonido.DOG) cuando a es nulo y enum no está declarado como estático? ¿Están las instancias enum estáticas por defecto?¿Hay instancias de enumeraciones estáticas por defecto?

+0

La única diferencia entre los valores enum y 'static' es que no puede colocar un bloque' static {} 'antes de los valores enum. –

+2

¿Por qué esta pregunta está etiquetada scjp? – OldCurmudgeon

Respuesta

22

Las enumeraciones son implícitamente public static final.

puede hacer referencia a a.DOG porque usted puede de acceso a miembros estáticos a través de instancia referencias, incluso cuando nulo: estática resolución utiliza el tipo de referencia , no es el caso.

I no; es engañoso: la convención favorece referencias estáticas tipo (no instancia).

Ver JLS 6.5.6.2 con respecto a la variable de clase mediante instancias. Consulte JLS 15.11 para saber por qué todavía funciona con un null. Nutshell: es el tipo de referencia, no la instancia, a través del cual se resuelven las estadísticas.


enlaces Actualizado:/

JSE 6

JSE 7

JSE 8

6

Sí, las enumeraciones son efectivamente estáticas.

Cuestiones relacionadas