tipo recorrer enum java enums static-members

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.

Foro de la comunidad de Oracle y discusión sobre esto


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