tipo - recorrer enum java
Enum estático vs. Enum no estático (4)
Si está hablando de enumeraciones anidadas, están implícitamente static
por defecto.
De acuerdo con la Especificación del lenguaje Java :
Los tipos enum anidados son implícitamente estáticos. Está permitido declarar explícitamente que un tipo de enumeración anidado sea estático.
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la diferencia entre enum estático y no estático en Java? Ambos usos son iguales.
¿Es correcto que todos los estáticos se cargan en la memoria al inicio, y los no estáticos se cargan a pedido ? En caso afirmativo, ¿qué método es mejor? ¿Mantener algunos datos siempre en la memoria o usar los recursos del servidor para cargarlos cada vez?
public class Test {
public enum Enum1 {
A, B
}
public static enum Enum2 {
C, D
}
public static void main(String[] args) {
Enum1 a = Enum1.A;
Enum1 b = Enum1.B;
Enum2 c = Enum2.C;
Enum2 d = Enum2.D;
}
}
Todos los enumerados son implícitamente estáticos, simplemente no es necesario escribir la palabra clave static
. De forma similar a la forma en que todos los métodos de interfaz son implícitamente públicos.
Como las enums
son inherently static
, no hay necesidad y no hace ninguna diferencia al usar static-keyword
en enums
.
Si una enumeración es miembro de una clase, es implícitamente estática.
Las interfaces pueden contener declaraciones de tipo de miembro. Una declaración de tipo de miembro en una interfaz es implícitamente estática y pública.
Todas las enum
son efectivamente static
. Si tiene una enumeración anidada, es muy similar a una static class
.
Todas las clases están cargadas de forma perezosa (enum u otras), sin embargo, cuando se cargan, se cargan todas a la vez. es decir, no puede haber algunas constantes cargadas pero no otras (excepto en el medio de la inicialización de la clase)
Java permite que ciertos modificadores sean implícitos para evitar tener que declararlos todo el tiempo. Esto significa que agregar un modificador no hace necesariamente otra cosa que proporcionar una forma más larga de escribir lo mismo.
Modificadores por defecto para
clase campo / método / clase anidada - paquete local, no final, no estático
enum y enum anidado - paquete local, final y estático
campo de interfaz - public static final
método de interfaz - public abstract
clase anidada en una interfaz - public static
, no final
Nota: mientras static
es opcional para una enum
, siempre es estático. Sin embargo, no se puede establecer el final
para una enumeración aunque siempre sea final
(técnicamente puede tener subclases con implementaciones anuladas para las constantes)
EDITAR: El único lugar que necesita utilizar static
con enum
es con import static
del valor de una enumeración. Gracias @ man910