Java Enum oktatóanyag: Mi ez és hogyan kell megvalósítani?

Ez a Java Enum bemutatóról szóló cikk részletes ismereteket nyújt Önnek az Enum konstansokról, valamint gyakorlati példákkal a jobb megértés érdekében.

Az Számlálás itt egy módja annak, hogy meghatározzunk egy osztályt rögzített és elnevezett állandókkal a kulcsszó használatával enum. Ebben ' Java Enum bemutató ”Cikket, megtanuljukhatározza meg a Számlálást együttpéldák a jobb megértéshez.



Mi az a felsorolás?

Java Enums olyan osztályok, amelyek állandó konstansokkal vagy változókkal rendelkeznek, amelyek nem szoktak változni. A Java-ban történő felsorolást a kulcsszóval érjük el enum. A Java enum állandók vannak statikus és végső hallgatólagosan. Az Enum funkció azóta elérhető JDK 1.5 verzió.



Miért van szükségünk felsorolásra?

enum javítja a típusbiztonságot a fordítási idő ellenőrzésénél, hogy elkerülje a futás közbeni hibákat a kazánlap kódjának elkerülésével. Például, ha a lehető legkevesebb lehetőség közül egyet kell választania,

Munka Típus: (Szerződés / Ideiglenes / Állandó)



Java enum oktató alkalmazott

Akkor a legjobb megoldás az an használata enum. Mivel enum a kapcsolóban könnyen használható. enum bejárható. enum tud van mezők, kivitelezők és módszerek. Ennélfogva , ez növeli a fordítási idő ellenőrzését és elkerüli az érvénytelen állandók átadása miatti hibákat, mivel már dokumentálta, hogy mely értékek legálisak.

Különbségek az Enum és az osztály között

Bár egy osztály és az enum hasonló funkcionalitással bír a Java környezetben, néhány szempontból különböznek egymástól. Beszéljük meg a különbségeket



Enum Osztály
Az enum konstansokat nem lehet felülírniAz osztályállandókat felül lehet írni
Az Enum nem támogatja az objektumok létrehozásátAz osztály támogatja az objektumok létrehozását
Az Enum nem bővíthet más osztályokatEgy osztály kiterjeszthet más osztályokat is
enum c egy munkaeszköz interfészEgy osztály képes megvalósítani az interfészt


Gyakorlati példák az Enumra

Az enum sokkal jobb megértése érdekében hajtsunk végre néhány gyakorlati példát az alábbiak alapján.

A felsorolás meghatározása a Java-ban

Az enum deklarálható akár osztályon belül, akár c-n kívülhadd. De ez egyetlen módszerrel sem deklarálható. Vegyünk egy kis példát a szintaxisának, definíciójának és deklarációjának megértéséhez.

A hacker és az etikus hacker között a fő különbség a következő:

Szintaxis:

enum név {konstans}

Ebben a példában kijelentettük a fő() módszer belül enum

csomag meghatározása public class Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

Ebben a példában a fő() módszer deklarálva van kívül of enum.

csomag meghatározása enum Color {BAJAJ, KTM, YAMAHA} public class Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Kimenet:

YAMAHA

Enum használt Switch Case

A felsorolás kapcsoló utasításban is használható. Fontos, hogy az összes case utasításnak ugyanabból az enumból kell állandókat használnia, mint a switch utasításban. Nézzünk meg egy példát ez alapján.

Itt egy olyan enumot hirdetünk, amelynek elemei a hét napjai, és az adatokat karakterlánc formájában továbbítjuk az egyezési eset adatainak kinyomtatásához.

csomag váltott enum Nap {VASÁRNAP, HÉTFŐ, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK, SZOMBAT} nyilvános osztály Edureka {Napi nap nyilvános Edureka (Napi nap) {this.day = nap} public void dayIsLike () {switch (nap) {eset HÉTFŐ: System.out.println ('Szia, ma hétfő') törésesemény KEDD: System.out.println ('Szia, ma kedd van') szünet eset SZERDA: System.out.println ('Szia, ma szerda van. ') break case CSÜTÖRTÖK: System.out.println (' Szia, ma csütörtök van ') break case PÉNTEK: System.out.println (' Helló, ma péntek van. ') break case SZOMBAT: System.out.println (' Szia, ma a hétvége ') szünet eset VASÁRNAP: System.out.println (' Szia, ma ünnep van ') szünet alapértelmezett: System.out.println (' Kérjük, adjon meg érvényes napot. ') Szünet}} public static void main (String [] args) {String str = 'HÉTFŐ' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Kimenet:

Szia, ma van hétfő

Öröklés enum felhasználásával

Alapvetően bármilyen enum osztályként jelenik meg, amely kiterjeszti az elvont java.lang osztályt. Enum és több statikus tagja van. Ezért egy enum nem bővíthet más osztályt vagy enum nincs többszörös örökségek . Hajtsunk végre egy példát, hogy jobban megértsük.

Itt a telefonkészítő alapján örököljük az operációs rendszert.

csomag örökség import java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List örökölni = új ArrayList () örökség.add (KönyvtárEnum.FIRST) örökség.add (ClientEnum. google) for (HTTPMethodConvertible elem: örökölni) {System.out.println (element.getHTTPMethodType ())}} statikus felület HTTPMethodConvertible {public String getHTTPMethodType ()} statikus enum LibraryEnum megvalósítja a HTTPMethodConvertible {FIRST 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementates HTTPMethodConvertible {huawei ('Hong ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

//Kimenet:

Google Pixel
Android One

Enum testreszabott értékekkel

Az Enums-nek alapértelmezés szerint saját karakterlánc-értéke van, néhány egyéni értéket is rendelhetünk az Enum-hoz. Vizsgáljuk meg az alábbi példát.

enum Forgalom {VÖRÖS ('STOP'), NARANCS ('WAIT'), ZÖLD ('GO')}

A fenti példában láthatjuk, hogy a Traffic enum három tagú. Ugyanis,

PIROS NARANCS és ZÖLD a saját egyedi értékekkel STOP, VÁRJ és MEGY illetőleg.

Most, hogy ugyanazt a típusú kódot használjuk a kódban, várhatóan néhány pontot követünk:

  • Alkotnunk kell paraméterezett konstruktor erre az enum osztályra. Mert ezt tudjuk enum osztály objektuma nem hozható létre kifejezetten, ezért az inicializáláshoz paraméterezett konstruktort használunk.
  • Az építész nem lehet közönség vagy megvédhető magán vagy alapértelmezett módosítók. Ha nyilvánosat vagy védettet hozunk létre, ez lehetővé teszi több objektum inicializálását, amelyek teljesen ellene vannak enum funkcionalitás.
  • Getter módszert kell létrehoznunk az értékének megszerzéséhez enums.

Hajtsunk végre egy programot ennek alapján.

csomag forgalmi felsorolás TrafficSignal {RED ('STOP'), ZÖLD ('GO'), ORANGE ('WAIT') privát String akció public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() for (TrafficSignal signal: signal) {System.out.println ('név:' + jel.név () + 'művelet:' + signal.getAction ())}}}

//Kimenet:

név: PIROS akció: STOP
név: ZÖLD akció: GO
férfi e: NARANCS akció: VÁRJ

Számoljon be if-else-if utasításokban

Most pedig futtassunk egy programot az alapján en-if-if-if nyilatkozatokban. Itt találjuk meg az áthaladás irányát az enumban elérhető irányértékek átadásával.

csomag Útmutatások enum Útvonalak {KELET, NYUGAT, ÉSZAK, DÉL}} public class Edureka {public static void main (String args []) {Directions dir = Directions. NORTH if (dir == Directions.EAST) {System.out.println ( 'Irány: Kelet')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Direction : Észak ')} else {System.out.println (' Irány: Dél ')}}}

//Kimenet:

Mond felirat: Észak

Különböző módszerek az enummal együtt

Értékek (): Amikor létrehoz egy enumot, a Java fordító belsőleg hozzáteszi a értékek () módszer. Ez a módszer egy sor amely az enum összes értékét tartalmazza.

//Szintaxis:

nyilvános statikus enum típusú [] értékek ()

Megtudjuk egy tömb adott elemének indexértékét.

csomagértékek enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'indexnél '+ col.ordinal ())} System.out.println (Color.valueOf (' RED '))}}

//Kimenet:

legjobb szoftver a java programozáshoz

RED a 0 indexen
ZÖLD az 1. indexen
KÉK a 2. indexen
HÁLÓ

Értéke(): Ezmetódust használjuk annak a felsorolási állandónak a visszaadására, amelynek értéke megegyezik az argumentumként adta át, miközben meghívta ezt a módszert.

//Szintaxis:

public static enum típusú valueOf (String str)

Itt találjuk meg egy adott telefon költségét a karakterláncnak átadott bemenet alapján.

mobilértékek csomagértékei Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') a (Mobile m: Mobile.values ​​()) {System.out.println (m + 'költségek' + m.showPrice () + 'dollár' )} Mobil ret ret = Mobile.valueOf ('Samsung') System.out.println ('Kiválasztva:' + ret)}}

//Kimenet:

A Samsung ára 1099 dollár
Az Apple ára 1250 dollár
A Google ára 1325 dollár
Kiválasztva: Samsung

Sorrendi(): A Java tolmács hozzáadja a sorrendi() módszer belsőleg, amikor létrehoz egy enum. Az ordinal () metódus a index az enum értékéből.

//Szintaxis:

nyilvános végső int sorszám ()

Itt megtudjuk egy tömb adott elemének indexértékét. és a cseresznye gyümölcs helyzetét is.

Csomagolási sor enum Gyümölcsök {Alma, banán, cseresznye, dátum, bodza} enum zöldségfélék {sárgarépa, cékla, bab, paradicsom, hagyma} nyilvános osztály Edureka {public static void main (String [] érvelés) {Fruits [] fru = gyümölcsök. értékei () a (Gyümölcsök fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Gyümölcsök f1, f2, f3 f1 = Gyümölcsök. Alma f2 = Gyümölcsök. Cseresznye f3 = Gyümölcsök. Alma if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'a' + f1 után következik]} Zöldség v1 = Zöldség.Beetroot if (f1.egyenlő (v1)) {System.out.println (' Helytelen ')}}}

//Kimenet:

Apple: 0
Banán: 1
Cseresznye: 2
Dátum: 3
Bodza: ​​4
Cherry jön az Apple után

Az Enum előnyei

  • Javul a Java Enum típusú biztonság
  • Az Enum úgy lett megtervezve, hogy könnyen használható legyen kapcsoló esetek
  • Enum lehet bejárta
  • Enumnak lehet mezők, módszerek, és kivitelezők
  • Az Enum képes végrehajtani interfészek
  • Az Enum nem tudja meghosszabbítani a osztály mert belsőleg kiterjed Enum osztály

Enum Usecase: Rock, Paper, Ollós játék

Használni fogjuk enum Java-ban, hogy megalkossuk gyermekkori játékunkat, a szikla (kő) papír és olló . A következő kód elmagyarázza, hogyan.

csomag Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} public class SPS {public static void main (String [] args) {Random random = new Random () logikai játékOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Szkenner = új Szkenner (System.in) System.out.println ('nHadd kezdjük ... n'), miközben (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') logikai validInput do {System.out.print ('nA te fordulás (Írjon be s-t ollóért, p-t papírért, t-t kőért, q kilépéshez: n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ') ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'nKérjük, ellenőrizze a bemenetet, és próbálkozzon újra! n') validInput = false}} míg (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt jött a sorom: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('n Én vagyok a soron: PAPÍR')} else {computerMove = HandSign.STONE System.out.println ('nNe vagyok a soron: STONEn')} if (computerMove = = playerMove) {System.out.println ('n Ez döntetlen! n') ++ számTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor papírt vág , Nyertem! N ') ++ numComputerWon} mást, ha (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper kőbe burkolózott, én nyertem! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone ollót bont, én nyertem! n') ++ numComputerWon} else {System.out.println ('nCongratulations. ..! Ön nyerte! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nA vizsgálatok száma: '+ numTrials) System.out.printf ('% d (%. 2f %%) nyertem . Ön nyert% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Viszlát! Remélem tetszett ..! ' )}}

//Kimenet:

Fogjunk hozzá...
Ollós-papír-kő
Te (írd be s-t egy ollóért, p-t papírért, t-t kőért, q-t a kilépéshez):
s
Itt a sor: KŐ
Kő ollót tör, én nyertem!
Ollós-papír-kő
Te (írd be s-t egy ollóért, p-t papírért, t-t kőért, q-t a kilépéshez):
mit
A kísérletek száma: 1 1-et nyertem (100,00%). 0-t nyert (0,00%).
Viszlát! Remélem tetszett ..!

Ezzel véget értünk a Java Enum bemutatónak. Remélem, néhány valós idejű példán keresztül megértette a Java-ban szereplő Enum-ot és annak megvalósítását.

Most, hogy megértetted enum alapokat ezen a „Java Enum bemutatón” keresztül nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsító tanfolyamait olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és betanítson mind az alapvető, mind a fejlett Java koncepciókra, különféle Java keretrendszerekkel együtt, például a Hibernate Tavaszi .

Van egy kérdésünk? Említse meg a „Java Enum Tutorial” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.