Java Enum Tutorial: Was ist das und wie wird es implementiert?



Dieser Artikel zum Java Enum Tutorial bietet Ihnen ein detailliertes Wissen über Enum-Konstanten sowie praktische Beispiele zum besseren Verständnis.

Das Aufzählung in ist eine Möglichkeit, eine Klasse mit festen und benannten Konstanten mit ihren jeweiligen zu definieren mit dem Schlüsselwort Aufzählung. In diesem ' Java Enum Tutorial Artikel werden wir lernenDefinieren Sie die Aufzählung zusammen mitBeispiele für ein besseres Verständnis.

Was ist Aufzählung?

Java Enums sind Klassen mit einem festen Satz von Konstanten oder Variablen, die sich nicht ändern. Die Aufzählung in Java erfolgt über das Schlüsselwort Aufzählung. Das Java Aufzählung Konstanten sind statisch und Finale implizit. Die Enum-Funktion ist seitdem verfügbar JDK Version 1.5.





Warum brauchen wir eine Aufzählung?

Aufzählung Verbessert die Typensicherheit bei der Überprüfung zur Kompilierungszeit, um Fehler zur Laufzeit zu vermeiden, indem Code auf dem Boilerplate vermieden wird. Wenn Sie beispielsweise eine Möglichkeit aus der geringsten Anzahl verfügbarer Optionen auswählen müssen, z.

Job Art: (Vertrag /. Temporär /. Permanent)



Java Enum Tutorial Mitarbeiter

Dann wäre die beste Option die Verwendung eines Aufzählung. weil Aufzählung kann leicht im Schalter verwendet werden. Aufzählung kann durchquert werden. Aufzählung kann haben Felder, Konstruktoren und Methoden. DaherDies erhöht die Überprüfung der Kompilierungszeit und vermeidet Fehler aufgrund der Übergabe ungültiger Konstanten, da Sie bereits dokumentiert haben, welche Werte verwendet werden dürfen.

Unterschiede zwischen Enum und Klasse

Obwohl eine Klasse und eine Aufzählung in der Java-Umgebung ähnliche Funktionen haben, unterscheiden sie sich in einigen Aspekten. Lassen Sie uns die Unterschiede diskutieren



Aufzählung Klasse
Enum-Konstanten können nicht überschrieben werdenKlassenkonstanten können überschrieben werden
Enum unterstützt die Erstellung von Objekten nichtKlasse unterstützt die Erstellung von Objekten
Enum kann andere Klassen nicht erweiternEine Klasse kann andere Klassen erweitern
Aufzählung ceine GeräteschnittstelleEine Klasse kann Interface implementieren


Praktische Beispiele für Enum

Um die Aufzählung besser zu verstehen, lassen Sie uns einige praktische Beispiele ausführen, die auf den folgenden basieren.

Aufzählung in Java definieren

Enum kann entweder innerhalb einer Klasse oder außerhalb eines c deklariert werdenlass. Es kann jedoch in keiner Methode deklariert werden. Nehmen wir ein kleines Beispiel, um die Syntax, Definition und Deklaration zu verstehen.

Implementieren Sie die Prioritätswarteschlange c ++

Syntax:

Aufzählungsname {Konstanten}

In diesem Beispiel haben wir das deklariert Main() Methode Innerhalb Aufzählung

Paketdefinition öffentliche Klasse Edureka {enum Level {BAJA, KTM, YAMAHA} öffentliche statische Leere main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ausgabe

KTM

In diesem Beispiel ist die Main() Methode wird deklariert draußen von enum.

Paketdefinition enum Farbe {BAJAJ, KTM, YAMAHA} öffentliche Klasse Edureka {öffentliche statische Leerstelle main (String [] args) {Fahrrad b1 = Color.YAMAHA System.out.println (b1)}}

//Ausgabe:

YAMAHA

Aufzählung in Switch Case verwendet

Die Aufzählung kann auch in einer switch-Anweisung verwendet werden. Es ist wichtig, dass alle case-Anweisungen Konstanten aus derselben Aufzählung verwenden, die von der switch-Anweisung verwendet wird. Lassen Sie uns ein Beispiel basierend darauf überprüfen.

Hier deklarieren wir eine Aufzählung mit Wochentagen als Elementen und übergeben die Daten in Form einer Zeichenfolge, um die Daten des übereinstimmenden Falls zu drucken.

Paket gewechselt enum Tag {SONNTAG, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG} öffentliche Klasse Edureka {Tag Tag öffentliche Edureka (Tag Tag) {this.day = Tag} public void dayIsLike () {switch (Tag) {case MONTAG: System.out.println ('Hallo, heute ist Montag') Pausenfall DIENSTAG: System.out.println ('Hallo, heute ist Dienstag') Pausenfall MITTWOCH: System.out.println ('Hallo, heute ist Mittwoch') ') Pausenfall DONNERSTAG: System.out.println (' Hallo, heute ist Donnerstag ') Pausenfall FREITAG: System.out.println (' Hallo, heute ist Freitag. ') Pausenfall SAMSTAG: System.out.println (' Hallo, heute ist dein Wochenende ') Pausenfall SONNTAG: System.out.println (' Hallo, heute ist ein Feiertag ') Pausenstandard: System.out.println (' Bitte geben Sie einen gültigen Tag ein. ') Pause}} public static void main (String [] args) {String str = 'MONTAG' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Ausgabe:

Hallo, heute istMontag

Vererbung mit Aufzählung

Grundsätzlich keine Aufzählung wird als eine Klasse dargestellt, die die abstrakte Klasse java.lang erweitert. Aufzählung und hat mehrere statische Elemente. Daher ist ein Aufzählung kann keine andere Klasse erweitern oder Aufzählung Es gibt kein Vielfaches Erbschaften . Lassen Sie uns ein Beispiel ausführen, um es besser zu verstehen.

Hier erben wir das Betriebssystem basierend auf dem Telefonhersteller.

Import der Paketvererbung java.util.ArrayList import java.util.List öffentliche Klasse Edureka {public static void main (String [] args) {Liste erben = neue ArrayList () erben.add (LibraryEnum.FIRST) erben.add (ClientEnum. google) für (HTTPMethodConvertible-Element: erben) {System.out.println (element.getHTTPMethodType ())}} statische Schnittstelle HTTPMethodConvertible {public String getHTTPMethodType ()} statische Aufzählung LibraryEnum implementiert HTTPMethodConvertible {FIRST ('Google Pixel'), SECOND (' 'Huawei'), DRITTE ('Apple 11 Pro') Zeichenfolge httpMethodType LibraryEnum (Zeichenfolge phone) {httpMethodType = phone} öffentliche Zeichenfolge getHTTPMethodType () {return httpMethodType}} statische Aufzählung ClientEnum implementiert HTTPMethodConvertible {huawei ('HongMing OS'), Apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} öffentlicher String getHTTPMethodType () {return httpMethodType}}}

//Ausgabe:

Google Pixel
Android One

Aufzählung mit benutzerdefinierten Werten

Aufzählungen haben standardmäßig ihre eigenen Zeichenfolgenwerte. Wir können Aufzählungen auch einige benutzerdefinierte Werte zuweisen. Betrachten wir das folgende Beispiel.

Enum Traffic {ROT ('STOP'), ORANGE ('WAIT'), GRÜN ('GO')}

Im obigen Beispiel sehen wir, dass die Verkehrsaufzählung drei Mitglieder hat. Nämlich,

ROT ORANGE und GRÜN mit haben ihre eigenen unterschiedlichen benutzerdefinierten Werte STOP, WARTEN und GEHEN beziehungsweise.

Um nun denselben Aufzählungstyp im Code zu verwenden, müssen wir einige Punkte beachten:

  • Wir müssen schaffen parametrisierter Konstruktor für diese Aufzählungsklasse. Weil wir das wissen Aufzählung Das Objekt der Klasse kann nicht explizit erstellt werden. Für die Initialisierung verwenden wir einen parametrisierten Konstruktor.
  • Das Baumeister kann nicht die Öffentlichkeit sein oder geschützt, die es haben muss Privat oder Standard Modifikatoren. Wenn wir öffentlich oder geschützt erstellen, können mehr als ein Objekt initialisiert werden, das völlig dagegen ist Enum-Funktionalität.
  • Wir müssen eine Getter-Methode erstellen, um den Wert von zu erhalten Aufzählungen.

Lassen Sie uns ein darauf basierendes Programm ausführen.

Paketverkehrsaufzählung TrafficSignal {ROT ('STOP'), GRÜN ('GO'), ORANGE ('WAIT') private String-Aktion public String getAction () {return this.action} privates TrafficSignal (String-Aktion) {this.action = Aktion}} öffentliche Klasse Edureka {public static void main (String args []) {TrafficSignal [] Signale = TrafficSignal.values ​​() für (TrafficSignal Signal: Signale) {System.out.println ('Name:' + Signal.Name () + 'action:' + signal.getAction ())}}}

//Ausgabe:

Name: ROT Aktion: STOP
Name: GRÜN Aktion: GO
männliche: ORANGE Aktion: WARTEN

Aufzählung in if-else-if-Anweisungen

Lassen Sie uns nun ein Programm ausführen, das auf basiert Aufzählung in if-else-if-Anweisungen. Hier finden wir die Richtung der Durchquerung, indem wir die Werte der in der Aufzählung verfügbaren Richtungen übergeben.

Paket Richtungen enum Richtungen {EAST, WEST, NORTH, SOUTH} öffentliche Klasse Edureka {public static void main (String args []) {Richtungen dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Richtung: Ost')} else if (dir == Directions.WEST) {System.out.println ('Richtung: West')} else if (dir == Directions.NORTH) {System.out.println ('Richtung : North ')} else {System.out.println (' Richtung: South ')}}}

//Ausgabe:

Sagenction: Norden

Verschiedene Methoden mit Enum

Werte(): Wenn Sie eine Aufzählung erstellen, wird die Java-Compiler intern fügt die Werte() Methode. Diese Methode gibt eine zurück Array enthält alle Werte der Aufzählung.

//Syntax:

public static enum-type [] values ​​()

Wir werden den Indexwert eines bestimmten Elements in einem Array herausfinden.

Paketwerte enum Farbe {ROT, GRÜN, BLAU} öffentliche Klasse Edureka {öffentliche statische Leere main (String [] args) {Color arr [] = Color.values ​​() für (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Ausgabe:

ec2 Instanz aus Snapshot erstellen

ROT bei Index 0
GRÜN bei Index 1
BLAU bei Index 2
NETZ

Wert von(): DiesMethode wird verwendet, um die Aufzählungskonstante zurückzugeben, deren Wert gleich dem ist beim Aufrufen dieser Methode als Argument übergeben.

//Syntax:

public static enum-type valueOf (String str)

Hier finden Sie die Kosten für ein bestimmtes Telefon basierend auf der Eingabe, die wir an die Zeichenfolge übergeben.

Paketwerte von enum Mobile {Samsung (1099), Apple (1250), Google (1325) int Preis Mobile (int p) {Preis = p} int showPrice () {Rückgabepreis}} öffentliche Klasse Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') für (Mobile m: Mobile.values ​​()) {System.out.println (m + 'Kosten' + m.showPrice () + 'Dollar' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Ausgewählt:' + ret)}}

//Ausgabe:

Samsung kostet 1099 Dollar
Apple kostet 1250 Dollar
Google kostet 1325 Dollar
Ausgewählt: Samsung

Ordinal(): Der Java-Interpreter fügt das hinzu Ordinal() Methode intern, wenn es eine erstellt Aufzählung. Die ordinale () Methode gibt die zurück Index des Aufzählungswertes.

//Syntax:

public final int ordinal ()

Hier ermitteln wir den Indexwert eines bestimmten Elements in einem Array. und auch die Position der Kirschfrucht.

Paket ordinal enum Früchte {Apfel, Banane, Kirsche, Dattel, Holunder} enum Gemüse {Karotte, Rote Beete, Bohnen, Tomate, Zwiebel} öffentliche Klasse Edureka {öffentliche statische Leere main (String [] args) {Früchte [] fru = Früchte. values ​​() for (Früchte fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Früchte f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'kommt nach' + f1)} Gemüse v1 = Gemüse.Beetroot if (f1.equals (v1)) {System.out.println (' Falsch') } } }

//Ausgabe:

Apple: 0
Banane: 1
Kirsche: 2
Datum: 3
Holunder: 4
Kirsche kommt nach Apple

Vorteile von Enum

  • Enum in Java verbessert sich Typ Sicherheit
  • Enum ist so konzipiert, dass es leicht zu verwenden ist Fälle wechseln
  • Aufzählung kann sein durchquert
  • Enum kann haben Felder, Methoden, und Konstruktoren
  • Enum kann implementieren Schnittstellen
  • Enum kann a nicht verlängern Klasse denn intern erstreckt es sich Aufzählung Klasse

Enum Usecase: Stein, Papier, Scherenspiel

Wir werden verwenden Aufzählung in Java, um unser Kinderspiel zu erstellen, das Steinpapier und die Schere . Der folgende Code erklärt, wie.

Paket Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} öffentliche Klasse SPS {public static void main (String [] args) {Random random = new Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = neuer Scanner (System.in) System.out.println ('nLass uns beginnen ... n') während (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nIhr Zug (Bitte geben Sie s für eine Schere, p für Papier, t für Stein, q ein zu beenden): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true wenn (inChar ==' q ') {gameOver = true} sonst wenn (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'nBitte überprüfen Sie die Eingabe und versuchen Sie es erneut! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('Ich bin an der Reihe: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt ist an der Reihe: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt ist an der Reihe: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor schneidet Papier , I won! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper Wraps Stone, I won! N ') ++ numComputerWon} sonst wenn (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone bricht die Schere, ich habe gewonnen! n') ++ numComputerWon} else {System.out.println ('nCongratulations. ..! Sie haben gewonnen! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nDie Anzahl der Versuche: '+ numTrials) System.out.printf (' Ich habe% d gewonnen (%. 2f %%) Sie haben% d (%. 2f %%) gewonnen.% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Bye!, Hoffe es hat Ihnen gefallen ..! ' )}}

//Ausgabe:

Lasst uns anfangen...
Scheren-Papier-Stein
Sie sind dran (Bitte geben Sie s für eine Schere, p für Papier, t für Stein, q zum Beenden ein):
s
Ich bin dran: STONE
Stein bricht Schere, ich habe gewonnen!
Scheren-Papier-Stein
Sie sind dran (Bitte geben Sie s für eine Schere, p für Papier, t für Stein, q zum Beenden ein):
Was
Die Anzahl der Versuche: 1Ich habe 1 gewonnen (100,00%). Sie haben 0 (0,00%) gewonnen.
Tschüss! Hoffe es hat euch gefallen ..!

Damit sind wir am Ende dieses Java Enum-Tutorials angelangt. Ich hoffe, Sie haben die Enum in Java und ihre Implementierung anhand einiger Echtzeitbeispiele verstanden.

Jetzt wo du verstanden hast Aufzählung Grundlagen durch dieses 'Java Enum Tutorial' finden Sie in der von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Die Java J2EE- und SOA-Schulungs- und Zertifizierungskurse von Edureka richten sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für Kern- als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & schulen Frühling .

Hast du eine Frage an uns? Erwähnen Sie es im Kommentarbereich dieses Blogs „Java Enum Tutorial“ und wir werden uns so schnell wie möglich bei Ihnen melden.