logo

Java-enums

De Enum op Java is een gegevenstype dat een vaste reeks constanten bevat.

Het kan worden gebruikt voor dagen van de week (ZONDAG, MAANDAG, DINSDAG, WOENSDAG, DONDERDAG, VRIJDAG en ZATERDAG), richtingen (NOORD, ZUID, OOST en WEST), seizoen (LENTE, ZOMER, WINTER en HERFST of HERFST ), kleuren (ROOD, GEEL, BLAUW, GROEN, WIT en ZWART) etc. Volgens de Java-naamgevingsconventies moeten we alle constanten in hoofdletters hebben. We hebben dus opsomconstanten in hoofdletters.

Java Enums kunnen worden gezien als klassen met een vaste reeks constanten (een variabele die niet verandert). De Java-enumconstanten zijn statisch en impliciet definitief. Het is beschikbaar sinds JDK 1.5.

naamgevingsconventie voor Java

Enums worden gebruikt om ons eigen gegevenstype, zoals klassen, te creëren. De opsomming datatype (ook bekend als Enumerated Data Type) wordt gebruikt om een ​​enum in Java te definiëren. In tegenstelling tot C/C++ is enum in Java meer krachtig . Hier kunnen we een enum definiëren binnen de klasse of buiten de klasse.

Java Enum erft intern de Enum-klasse , dus het kan geen andere klasse erven, maar het kan wel veel interfaces implementeren. We kunnen velden, constructors, methoden en hoofdmethoden hebben in Java-enum.

Aandachtspunten voor Java Enum

  • Enum verbetert de typeveiligheid
  • Enum kan eenvoudig in een switch worden gebruikt
  • Enum kan worden doorkruist
  • Enum kan velden, constructors en methoden bevatten
  • Enum kan veel interfaces implementeren, maar kan geen enkele klasse uitbreiden omdat het de Enum-klasse intern uitbreidt
Java Enum-punten

Eenvoudig voorbeeld van 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); }} 
Test het nu

Uitgang:

 WINTER SPRING SUMMER FALL 

Laten we nog een voorbeeld van Java-enum bekijken, waarbij we de methoden value(), valueOf() en ordinal() van Java-enum gebruiken.

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

Uitgang:

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

Opmerking: de Java-compiler voegt tijdens het compileren intern de methoden waarden(), valueOf() en ordinal() toe aan de enum. Het creëert intern een statische en definitieve klasse voor de enum.

Wat is het doel van de methode value() in de enum?

De Java-compiler voegt intern de methode waarden() toe wanneer deze een enum maakt. De methode waarden() retourneert een array die alle waarden van de enum bevat.

Java-tekenreeks met formaat

Wat is het doel van de methode valueOf() in de enum?

De Java-compiler voegt intern de methode valueOf() toe wanneer deze een enum maakt. De methode valueOf() retourneert de waarde van een gegeven constante enum.

Wat is het doel van de ordinale() methode in de enum?

De Java-compiler voegt intern de methode ordinal() toe wanneer deze een enum maakt. De ordinal()-methode retourneert de index van de enum-waarde.


Java Enum definiëren

De enum kan binnen of buiten de klasse worden gedefinieerd, omdat deze vergelijkbaar is met een klasse. De puntkomma (;) aan het einde van de enum-constanten is optioneel. Bijvoorbeeld:

 enum Season { WINTER, SPRING, SUMMER, FALL } 

Of,

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

Beide definities van Java enum zijn hetzelfde.

Java Enum Voorbeeld: gedefinieerd buiten de klasse

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

Uitgang:

 WINTER 

Java Enum Voorbeeld: gedefinieerd binnen de klasse

 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); }} 
Test het nu

Uitgang:

 WINTER 

Java Enum Voorbeeld: hoofdmethode binnen Enum

Als u de methode main() in de enum plaatst, kunt u de enum rechtstreeks uitvoeren.

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

Uitgang:

 WINTER 

Initialiseren van specifieke waarden voor de enum-constanten

De enum-constanten hebben een beginwaarde die begint bij 0, 1, 2, 3, enzovoort. Maar we kunnen de specifieke waarde voor de enum-constanten initialiseren door velden en constructors te definiëren. Zoals eerder aangegeven kan Enum velden, constructors en methoden bevatten.

Voorbeeld van het opgeven van de beginwaarde voor de enum-constanten

 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); }} 
Test het nu

Uitgang:

java oeps-concepten
 WINTER 5 SPRING 10 SUMMER 15 FALL 20 

De constructor van het enum-type is privé. Als u de privécompiler niet declareert, wordt er intern een privéconstructor gemaakt.

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

Interne code gegenereerd door de compiler voor het bovenstaande voorbeeld van het enum-type

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

Kunnen we de instantie van Enum maken op basis van een nieuw trefwoord?

Nee, omdat het alleen particuliere constructeurs bevat.

Kunnen we een abstracte methode hebben in de Enum?

Ja natuurlijk! we kunnen abstracte methoden hebben en de implementatie van deze methoden verzorgen.


Java Enum in een switch-instructie

We kunnen enum toepassen op de switch-instructie zoals in het gegeven voorbeeld:

Voorbeeld van het toepassen van Enum op een switch-instructie

 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'); } }} 
Test het nu

Uitgang:

 monday