The Enum v Jave je dátový typ, ktorý obsahuje pevnú množinu konštánt.
Dá sa použiť pre dni v týždni (NEDEĽA, PONDELOK, UTOROK, STREDA, ŠTVRTOK, PIATOK a SOBOTA), smery (Sever, JU, VÝCHOD a ZÁPAD), ročné obdobie (JAR, LETO, ZIMA a JESEŇ alebo JESEŇ ), farby (ČERVENÁ, ŽLTÁ, MODRÁ, ZELENÁ, BIELA a ČIERNA) atď. Podľa konvencií Java pomenovania by sme mali mať všetky konštanty veľkými písmenami. Takže máme enum konštanty veľkými písmenami.
Java Enums možno považovať za triedy, ktoré majú pevnú množinu konštánt (premenná, ktorá sa nemení). Výčtové konštanty Java sú statické a implicitne konečné. Je k dispozícii od JDK 1.5.
govinda
Enumy sa používajú na vytváranie vlastných dátových typov, ako sú triedy. The enum dátový typ (tiež známy ako Enumerated Data Type) sa používa na definovanie enum v Jave. Na rozdiel od C/C++ je enum v Jave viac mocný . Tu môžeme definovať enum buď vnútri triedy alebo mimo triedy.
Java Enum interne zdedí Trieda Enum , takže nemôže zdediť žiadnu inú triedu, ale môže implementovať mnoho rozhraní. V Java enum môžeme mať polia, konštruktory, metódy a hlavné metódy.
Body na zapamätanie pre Java Enum
- Enum zlepšuje bezpečnosť typu
- Enum možno ľahko použiť v prepínači
- Enum je možné prechádzať
- Enum môže mať polia, konštruktory a metódy
- Enum môže implementovať mnoho rozhraní, ale nemôže rozšíriť žiadnu triedu, pretože interne rozširuje triedu Enum
Jednoduchý príklad 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); }}Vyskúšajte to
Výkon:
WINTER SPRING SUMMER FALL
Pozrime sa na ďalší príklad Java enum, kde používame metódy value(), valueOf() a ordinal() 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()); }}
Výkon:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
Poznámka: Kompilátor Java interne pridáva metódy values(), valueOf() a ordinal() v rámci enum v čase kompilácie. Interne vytvorí statickú a konečnú triedu pre enum.
Aký je účel metódy values() v enume?
Kompilátor Java interne pridáva metódu values() pri vytváraní enum. Metóda values() vracia pole obsahujúce všetky hodnoty enum.
podreťazec java obsahuje
Aký je účel metódy valueOf() v enum?
Kompilátor Java interne pridáva metódu valueOf() pri vytváraní enum. Metóda valueOf() vracia hodnotu daného konštantného enum.
Aký je účel metódy ordinal() v enum?
Kompilátor Java interne pridáva metódu ordinal() pri vytváraní enum. Metóda ordinal() vracia index hodnoty enum.
Definovanie Java Enum
Enum môže byť definované v rámci triedy alebo mimo nej, pretože je podobné triede. Bodkočiarka (;) na konci výčtových konštánt je voliteľná. Napríklad:
enum Season { WINTER, SPRING, SUMMER, FALL }
alebo
enum Season { WINTER, SPRING, SUMMER, FALL; }
Obe definície Java enum sú rovnaké.
Príklad Java Enum: Definované mimo triedy
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}Vyskúšajte to
Výkon:
WINTER
Príklad Java Enum: Definované vo vnútri triedy
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); }}Vyskúšajte to
Výkon:
WINTER
Java Enum Príklad: hlavná metóda vnútri Enum
Ak vložíte metódu main() do enum, môžete spustiť enum priamo.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
Výkon:
WINTER
Inicializácia špecifických hodnôt do enumových konštánt
Výpočtové konštanty majú počiatočnú hodnotu, ktorá začína od 0, 1, 2, 3 atď. Môžeme však inicializovať špecifickú hodnotu do enumových konštánt definovaním polí a konštruktorov. Ako bolo uvedené vyššie, Enum môže mať polia, konštruktory a metódy.
Príklad zadania počiatočnej hodnoty do enumových konštánt
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); }}Vyskúšajte to
Výkon:
príklady dfa
WINTER 5 SPRING 10 SUMMER 15 FALL 20
Konštruktor typu enum je súkromný. Ak nedeklarujete súkromný kompilátor, interne vytvorí súkromný konštruktor.
enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
Interný kód vygenerovaný kompilátorom pre vyššie uvedený príklad typu 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 }); } }
Môžeme vytvoriť inštanciu Enum pomocou nového kľúčového slova?
Nie, pretože obsahuje iba súkromné konštruktory. |
Môžeme mať v Enum abstraktnú metódu?
Áno, samozrejme! môžeme mať abstraktné metódy a môžeme zabezpečiť implementáciu týchto metód.
Java Enum v príkaze switch
Môžeme použiť enum na príkaz switch ako v danom príklade:
Príklad použitia Enum na príkaz 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'); } }}Vyskúšajte to
Výkon:
monday