logo

Výčty Java

The Enum v Javě je datový typ, který obsahuje pevnou sadu konstant.

Lze jej použít pro dny v týdnu (NEDĚLE, PONDĚLÍ, ÚTERÝ, STŘEDA, ČTVRTEK, PÁTEK a SOBOTA), směry (NA SEVER, JIH, VÝCHOD a ZÁPAD), roční období (JARO, LÉTO, ZIMA a PODZIM nebo PODZIM ), barvy (ČERVENÁ, ŽLUTÁ, MODRÁ, ZELENÁ, BÍLÁ a ČERNÁ) atd. Podle konvence pojmenování Java bychom měli mít všechny konstanty velkými písmeny. Máme tedy výčtové konstanty velkými písmeny.

Java Enums lze považovat za třídy, které mají pevnou sadu konstant (proměnnou, která se nemění). Výčtové konstanty Java jsou statické a implicitně konečné. Je k dispozici od JDK 1.5.

govinda

Výčty se používají k vytváření vlastních datových typů, jako jsou třídy. The enum datový typ (také známý jako Enumerated Data Type) se používá k definování výčtu v Javě. Na rozdíl od C/C++ je enum v Javě více silný . Zde můžeme definovat výčet buď uvnitř třídy, nebo mimo třídu.

Java Enum interně dědí Třída Enum , takže nemůže zdědit žádnou jinou třídu, ale může implementovat mnoho rozhraní. Ve výčtu Java můžeme mít pole, konstruktory, metody a hlavní metody.

Body k zapamatování pro Java Enum

  • Enum zlepšuje bezpečnost typu
  • Enum lze snadno použít ve switchi
  • Enum lze procházet
  • Enum může mít pole, konstruktory a metody
  • Enum může implementovat mnoho rozhraní, ale nemůže rozšířit žádnou třídu, protože interně rozšiřuje třídu Enum
Java Enum Points

Jednoduchý pří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); }} 
Otestujte to hned

Výstup:

 WINTER SPRING SUMMER FALL 

Podívejme se na další příklad Java enum, kde používáme metody 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ýstup:

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

Poznámka: Kompilátor Java interně přidává metody values(), valueOf() a ordinal() do výčtu v době kompilace. Interně vytvoří statickou a konečnou třídu pro enum.

Jaký je účel metody values() ve výčtu?

Kompilátor Java interně přidá metodu values() při vytváření výčtu. Metoda values() vrací pole obsahující všechny hodnoty výčtu.

Jaký je účel metody valueOf() ve výčtu?

Kompilátor Java interně přidá metodu valueOf() při vytváření výčtu. Metoda valueOf() vrací hodnotu daného konstantního enum.

Jaký je účel metody ordinal() ve výčtu?

Kompilátor Java interně přidá metodu ordinal() při vytváření výčtu. Metoda ordinal() vrací index hodnoty enum.


Definování Java Enum

Výčet lze definovat v rámci třídy nebo mimo ni, protože je podobný třídě. Středník (;) na konci výčtových konstant je volitelný. Například:

blokování reklam na youtube na Androidu
 enum Season { WINTER, SPRING, SUMMER, FALL } 

Nebo,

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

Obě definice Java enum jsou stejné.

Příklad Java Enum: Definováno mimo třídu

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

Výstup:

 WINTER 

Příklad Java Enum: Definováno uvnitř třídy

 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); }} 
Otestujte to hned

Výstup:

 WINTER 

Java Enum Příklad: hlavní metoda uvnitř Enum

Pokud do výčtu vložíte metodu main(), můžete výčet spustit přímo.

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

Výstup:

 WINTER 

Inicializace konkrétních hodnot do výčtových konstant

Výčtové konstanty mají počáteční hodnotu, která začíná od 0, 1, 2, 3 atd. Můžeme však inicializovat konkrétní hodnotu výčtových konstant definováním polí a konstruktorů. Jak bylo uvedeno výše, Enum může mít pole, konstruktory a metody.

Příklad zadání počáteční hodnoty výčtových konstant

 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); }} 
Otestujte to hned

Výstup:

 WINTER 5 SPRING 10 SUMMER 15 FALL 20 

Konstruktor typu enum je soukromý. Pokud nedeklarujete soukromý kompilátor, interně vytvoří soukromý konstruktor.

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

Interní kód generovaný kompilátorem pro výše uvedený pří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 vytvořit instanci Enum pomocí nového klíčového slova?

Ne, protože obsahuje pouze soukromé konstruktory.

Můžeme mít v Enum abstraktní metodu?

Ano, samozřejmě! můžeme mít abstraktní metody a můžeme zajistit implementaci těchto metod.


Java Enum v příkazu switch

Můžeme použít enum na příkaz switch jako v uvedeném příkladu:

parciální derivace symbol latex

Příklad použití Enum na pří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'); } }} 
Otestujte to hned

Výstup:

 monday