logo

Enumeració Java

El Enum en Java és un tipus de dades que conté un conjunt fix de constants.

Es pot utilitzar per als dies de la setmana (DIUMENGE, DILLUNS, DIMARTS, DIMECRES, DIJOUS, DIVENDRES i DISSABTE), direccions (NORD, SUD, EST i OEST), temporada (PRIVANA, ESTIU, HIVERN i TARDOR o TARDOR). ), colors (VERMELL, GROC, BLAU, VERD, BLANC i NEGRE) etc. D'acord amb les convencions de denominació de Java, hauríem de tenir totes les constants en majúscules. Per tant, tenim constants d'enumeració en majúscules.

Les enumeracions Java es poden considerar com a classes que tenen un conjunt fix de constants (una variable que no canvia). Les constants d'enumeració de Java són estàtiques i finals implícitament. Està disponible des de JDK 1.5.

cadena java concatenada

Les enumeracions s'utilitzen per crear el nostre propi tipus de dades com les classes. El enumeració El tipus de dades (també conegut com a tipus de dades enumerades) s'utilitza per definir una enumeració a Java. A diferència de C/C++, enumeració a Java és més potent . Aquí, podem definir una enumeració dins de la classe o fora de la classe.

Java Enum hereta internament el Classe enumeració , de manera que no pot heretar cap altra classe, però pot implementar moltes interfícies. Podem tenir camps, constructors, mètodes i mètodes principals a Java enumeració.

Punts a recordar per a Java Enum

  • Enum millora la seguretat del tipus
  • Enum es pot utilitzar fàcilment a l'interruptor
  • Enum es pot recórrer
  • Enum pot tenir camps, constructors i mètodes
  • Enum pot implementar moltes interfícies, però no pot ampliar cap classe perquè internament amplia la classe Enum
Java Enum Points

Exemple senzill de Java Enum

 class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }} 
Prova-ho ara

Sortida:

 WINTER SPRING SUMMER FALL 

Vegem un altre exemple d'enumeració Java on estem utilitzant els mètodes value(), valueOf() i ordinal() de Java enum.

 class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }} 

Sortida:

 WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2 

Nota: el compilador Java afegeix internament els mètodes values(), valueOf() i ordinal() dins de l'enum en temps de compilació. Crea internament una classe estàtica i final per a l'enum.

Quin és l'objectiu del mètode values() a la enumeració?

El compilador de Java afegeix internament el mètode values() quan crea una enumeració. El mètode values() retorna una matriu que conté tots els valors de la enumeració.

Quin és l'objectiu del mètode valueOf() a l'enum?

El compilador de Java afegeix internament el mètode valueOf() quan crea una enumeració. El mètode valueOf() retorna el valor de la enumeració constant donada.

Quin és l'objectiu del mètode ordinal() a l'enum?

El compilador de Java afegeix internament el mètode ordinal() quan crea una enumeració. El mètode ordinal() retorna l'índex del valor d'enum.

en cadena en java

Definició de Java Enum

La enumeració es pot definir dins o fora de la classe perquè és similar a una classe. El punt i coma (;) al final de les constants enumeració és opcional. Per exemple:

 enum Season { WINTER, SPRING, SUMMER, FALL } 

O,

 enum Season { WINTER, SPRING, SUMMER, FALL; } 

Les dues definicions d'enum Java són les mateixes.

Java Enum Exemple: Definit fora de la classe

 enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }} 
Prova-ho ara

Sortida:

 WINTER 

Exemple d'enumeració Java: definit dins de la classe

 class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }} 
Prova-ho ara

Sortida:

convertir un nombre enter en una cadena
 WINTER 

Java Enum Exemple: mètode principal dins Enum

Si poseu el mètode main() dins de l'enum, podeu executar l'enum directament.

 enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } } 

Sortida:

 WINTER 

Inicialització de valors específics a les constants enumeració

Les constants enumeracions tenen un valor inicial que comença des de 0, 1, 2, 3, etc. Però, podem inicialitzar el valor específic de les constants d'enum definint camps i constructors. Com s'ha especificat anteriorment, Enum pot tenir camps, constructors i mètodes.

Exemple d'especificació del valor inicial a les constants enumeració

 class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }} 
Prova-ho ara

Sortida:

 WINTER 5 SPRING 10 SUMMER 15 FALL 20 

El constructor del tipus enumeració és privat. Si no declareu que el compilador privat crea internament un constructor privat.

 enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } } 

Codi intern generat pel compilador per a l'exemple anterior de tipus enum

 final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } } 

Podem crear la instància d'Enum amb una paraula clau nova?

No, perquè només conté constructors privats.

Podem tenir un mètode abstracte a l'Enum?

Sí, per suposat! podem tenir mètodes abstractes i podem proporcionar la implementació d'aquests mètodes.


Java Enum en una instrucció switch

Podem aplicar la instrucció enumeració a l'interruptor com a l'exemple donat:

Exemple d'aplicació Enum en una instrucció switch

 class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }} 
Prova-ho ara

Sortida:

 monday