logo

Java Enums

The Enum Java valodā ir datu tips, kas satur fiksētu konstantu kopu.

To var izmantot nedēļas dienām (SVĒTDIENA, PIRMDIENA, OTRDIENA, TREŠDIENA, CETURTDIENA, PIEKTDIENA un SESTDIENA), virzieniem (ZIEMEĻI, DIENVIDI, AUSTRUMI un RIETUMI), sezonai (PAVASARIS, VASARA, ZIEMA un RUDENS vai RUDENS). ), krāsas (SARKANS, DZELTENS, ZILS, ZAĻS, BALTS un MELNS) utt. Saskaņā ar Java nosaukumu piešķiršanas konvencijām mums visām konstantēm jābūt ar lielajiem burtiem. Tātad, mums ir enum konstantes ar lielajiem burtiem.

Java Enums var uzskatīt par klasēm, kurām ir fiksēta konstantu kopa (mainīgais, kas nemainās). Java enum konstantes ir statiskas un galīgas netieši. Tas ir pieejams kopš JDK 1.5.

galīgā stāvokļa mašīna

Enums tiek izmantots, lai izveidotu mūsu pašu datu tipu, piemēram, klases. The enum datu tips (pazīstams arī kā uzskaitītais datu tips) tiek izmantots, lai Java definētu enumu. Atšķirībā no C/C++, Java enum ir vairāk spēcīgs . Šeit mēs varam definēt enum vai nu klasē, vai ārpus tās.

Java Enum iekšēji manto Enum klase , tāpēc tā nevar mantot nevienu citu klasi, taču tā var ieviest daudzas saskarnes. Java enum var būt lauki, konstruktori, metodes un galvenās metodes.

Punkti, kas jāatceras par Java Enum

  • Enum uzlabo tipa drošību
  • Enum var viegli izmantot slēdžā
  • Enum var šķērsot
  • Enum var būt lauki, konstruktori un metodes
  • Enum var ieviest daudzas saskarnes, bet nevar paplašināt nevienu klasi, jo tas iekšēji paplašina Enum klasi
Java Enum punkti

Vienkāršs Java Enum piemērs

 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); }} 
Izmēģiniet to tūlīt

Izvade:

 WINTER SPRING SUMMER FALL 

Apskatīsim vēl vienu Java enum piemēru, kur mēs izmantojam Java enum metodes value (), valueOf () un ordinal ().

 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()); }} 

Izvade:

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

Piezīme: Java kompilators iekšēji pievieno vērtības(), valueOf() un ordinal() metodes enum ietvaros kompilēšanas laikā. Tas iekšēji izveido statisku un galīgo klasi enum.

Kāds ir vērtības() metodes mērķis sarakstā?

Java kompilators iekšēji pievieno vērtību() metodi, kad tas veido enum. Metode Values() atgriež masīvu, kurā ir visas enum vērtības.

Kāds ir valueOf() metodes mērķis sarakstā?

Java kompilators iekšēji pievieno valueOf() metodi, veidojot enum. Metode valueOf() atgriež dotās konstantes enum vērtību.

Kāds ir kārtas() metodes mērķis enum?

Java kompilators iekšēji pievieno ordinal() metodi, veidojot enum. Ordinal() metode atgriež enum vērtības indeksu.


Java Enum definēšana

Enum var tikt definēts klasē vai ārpus tās, jo tas ir līdzīgs klasei. Semikols (;) enum konstantu beigās nav obligāts. Piemēram:

apgriežot virkni java
 enum Season { WINTER, SPRING, SUMMER, FALL } 

vai,

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

Abas Java enum definīcijas ir vienādas.

Java Enum piemērs: definēts ārpus klases

 enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }} 
Izmēģiniet to tūlīt

Izvade:

 WINTER 

Java Enum piemērs: definēts klasē

 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); }} 
Izmēģiniet to tūlīt

Izvade:

 WINTER 

Java Enum piemērs: galvenā metode iekš Enum

Ja enum iekšpusē ievietojat metodi main(), varat palaist enum tieši.

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

Izvade:

 WINTER 

Konkrētu vērtību inicializācija enum konstantēm

Enum konstantēm ir sākotnējā vērtība, kas sākas ar 0, 1, 2, 3 un tā tālāk. Bet mēs varam inicializēt konkrēto vērtību uzskaites konstantēm, definējot laukus un konstruktorus. Kā norādīts iepriekš, Enum var būt lauki, konstruktori un metodes.

Piemērs sākotnējās vērtības norādīšanai enum konstantēm

 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); }} 
Izmēģiniet to tūlīt

Izvade:

 WINTER 5 SPRING 10 SUMMER 15 FALL 20 

Enum tipa konstruktors ir privāts. Ja jūs nedeklarējat privāto kompilatoru, iekšēji izveido privāto konstruktoru.

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

Iekšējais kods, ko kompilators ģenerē iepriekšminētajam enum tipa piemēram

 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 }); } } 

Vai varam izveidot Enum gadījumu, izmantojot jaunu atslēgvārdu?

Nē, jo tajā ir tikai privāti konstruktori.

Vai Enum var izmantot abstraktu metodi?

Jā, protams! mums var būt abstraktas metodes un nodrošināt šo metožu ieviešanu.


Java Enum slēdža priekšrakstā

Mēs varam lietot enum slēdža priekšrakstā, kā norādīts dotajā piemērā:

inkscape vs gimp

Piemērs Enum izmantošanai slēdža priekšrakstā

 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'); } }} 
Izmēģiniet to tūlīt

Izvade:

 monday