wyliczenie w Javie

na Jawie, Wyliczenia lub wyliczenie Java służą do reprezentowania grupy nazwanych stałych w języku programowania. Wyliczenia Java są używane, gdy w czasie kompilacji znamy wszystkie możliwe wartości, takie jak opcje w menu, tryby zaokrąglania, flagi wiersza poleceń itp. Zestaw stałych w typie wyliczeniowym nie musi być stały przez cały czas.

Co to jest wyliczenie lub wyliczenie w Javie?

Wyliczenie Java jest typem klasy. Chociaż nie musimy tworzyć instancji wyliczenia za pomocą nowy, ma takie same możliwości jak inne klasy. Fakt ten sprawia, że ​​wyliczanie w języku Java jest bardzo potężnym narzędziem. Podobnie jak w przypadku klas, możesz dawać im konstruktory, dodawać zmienne i metody instancji, a nawet implementować interfejsy.

Przykład wyliczenia:

4 kolory w talii kart do gry mogą składać się z 4 liczników o nazwach trefl, karo, kier i pik, należących do wyliczonego typu zwanego kolorem. Inne przykłady obejmują naturalne typy wyliczeniowe (takie jak planety, dni tygodnia, kolory, kierunki itp.).

Należy pamiętać, że w przeciwieństwie do klas, wyliczenia nie dziedziczą innych klas ani nie mogą zostać rozszerzone (tj. stać się nadklasą). Możemy także dodawać do niego zmienne, metody i konstruktory. Głównym celem wyliczenia jest zdefiniowanie własnych typów danych (wyliczeniowe typy danych).

Deklaracja wyliczenia w Javie

Deklarację wyliczenia można wykonać poza klasą lub wewnątrz klasy, ale nie wewnątrz metody.

1. Deklaracja poza zajęciami

Jawa




// A simple enum example where enum is declared> // outside any class (Note enum keyword instead of> // class keyword)> enum> Color {> > RED,> > GREEN,> > BLUE;> }> public> class> Test {> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }>

Wyjście

RED 

2. Deklaracja wewnątrz klasy

Jawa




// enum declaration inside a class.> public> class> Test {> > enum> Color {> > RED,> > GREEN,> > BLUE;> > }> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }>

Wyjście

RED 
  • Pierwsza linia wyliczenia powinna zawierać listę stałych, a następnie inne elementy, takie jak metody, zmienne i konstruktory.
  • Według Konwencje nazewnictwa w Javie , zaleca się, aby stałą nazywać wielkimi literami

Właściwości Enum w Javie

Istnieją pewne właściwości, po których następuje Enum, jak wspomniano poniżej:

  • Każde wyliczenie jest implementowane wewnętrznie przy użyciu klasy.
  • Każda stała wyliczeniowa reprezentuje obiekt typu wyliczeniowego.
  • Typ wyliczeniowy można przekazać jako argument do przełącznik sprawozdania.
  • Każda stała wyliczeniowa jest zawsze niejawna publiczny statyczny finał . Od kiedy jest statyczny , możemy uzyskać do niego dostęp za pomocą wyliczenia Name. Od kiedy jest finał , nie możemy tworzyć wyliczeń podrzędnych.
  • Możemy zadeklarować metoda main(). wewnątrz wyliczenia. Dlatego możemy wywołać wyliczenie bezpośrednio z wiersza poleceń.

Poniżej implementacja powyższych właściwości:

Jawa




// A Java program to demonstrate working on enum> // in switch case (Filename Test. Java)> import> java.util.Scanner;> // An Enum class> enum> Day {> > SUNDAY,> > MONDAY,> > TUESDAY,> > WEDNESDAY,> > THURSDAY,> > FRIDAY,> > SATURDAY;> }> // Driver class that contains an object of 'day' and> // main().> public> class> Test {> > Day day;> > // Constructor> > public> Test(Day day) {> this> .day = day; }> > // Prints a line about Day using switch> > public> void> dayIsLike()> > {> > switch> (day) {> > case> MONDAY:> > System.out.println(> 'Mondays are bad.'> );> > break> ;> > case> FRIDAY:> > System.out.println(> 'Fridays are better.'> );> > break> ;> > case> SATURDAY:> > case> SUNDAY:> > System.out.println(> 'Weekends are best.'> );> > break> ;> > default> :> > System.out.println(> 'Midweek days are so-so.'> );> > break> ;> > }> > }> > // Driver method> > public> static> void> main(String[] args)> > {> > String str => 'MONDAY'> ;> > Test t1 => new> Test(Day.valueOf(str));> > t1.dayIsLike();> > }> }>

Wyjście

Mondays are bad. 

Programy wyliczeniowe w Javie

1. Główna funkcja wewnątrz Enum

Możemy zadeklarować główną funkcję wewnątrz wyliczenia, ponieważ możemy wywołać wyliczenie bezpośrednio z wiersza poleceń.

Poniżej implementacja powyższej właściwości:

Jawa




// A Java program to demonstrate that we can have> // main() inside enum class.> enum> Color {> > RED,> > GREEN,> > BLUE;> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }>

Wyjście

RED 

2. Wykonaj pętlę przez Enum

Możemy iterować po Enum za pomocą wartości() i pętli. Funkcja wartości() zwraca tablicę wartości Enum jako stałe, za pomocą których możemy iterować po wartościach.

Poniżej znajduje się implementacja pętli poprzez Enum:

Jawa




// Java Program to Print all the values> // inside the enum using for loop> import> java.io.*;> // Enum Declared> enum> Color {> > RED,> > GREEN,> > BLUE;> }> // Driver Class> class> GFG {> > // Main Function> > public> static> void> main(String[] args)> > {> > // Iterating over all the values in> > // enum using for loop> > for> (Color var_1 : Color.values()) {> > System.out.println(var_1);> > }> > }> }>

Wyjście

RED GREEN BLUE 

3. Wyliczenie w instrukcji Switch

Jawa




// Java Program to implement> // Enum in a Switch Statement> import> java.io.*;> // Driver Class> class> GFG {> > // Enum Declared> > enum> Color {> > RED,> > GREEN,> > BLUE,> > Yellow;> > }> > // Main Function> > public> static> void> main(String[] args)> > {> > Color var_1=Color.Yellow;> > > // Switch case with Enum> > switch> (var_1){> > case> RED:> > System.out.println(> 'Red color observed'> );> > break> ;> > case> GREEN:> > System.out.println(> 'Green color observed'> );> > break> ;> > case> BLUE:> > System.out.println(> 'Blue color observed'> );> > default> :> > System.out.println(> 'Other color observed'> );> > }> > }> }>

Wyjście

Other color observed 

Wyliczenie i dziedziczenie

  • Wszystkie wyliczenia domyślnie rozszerzają Klasa java.lang.Enum . Ponieważ klasa może się tylko rozciągać jeden parent w Javie, wyliczenie nie może rozszerzać niczego innego.
  • metoda toString(). jest nadpisane Klasa java.lang.Enum , która zwraca stałą nazwę wyliczeniową.
  • enum może implementować wiele interfejsów.

Wyliczenie i konstruktor

  • Enum może zawierać konstruktor i jest wykonywany oddzielnie dla każdej stałej wyliczeniowej w momencie ładowania klasy wyliczeniowej.
  • Nie możemy jawnie tworzyć obiektów wyliczeniowych i dlatego nie możemy bezpośrednio wywołać konstruktora wyliczeniowego.

Wyliczenie i metody

Enum może zawierać oba Beton metody i abstrakcyjny metody. Jeśli klasa wyliczeniowa ma metodę abstrakcyjną, wówczas każda instancja klasy wyliczeniowej musi ją implementować.

Jawa




// Java program to demonstrate that enums can have> // constructor and concrete methods.> // An enum (Note enum keyword inplace of class keyword)> enum> Color {> > RED,> > GREEN,> > BLUE;> > // enum constructor called separately for each> > // constant> > private> Color()> > {> > System.out.println(> 'Constructor called for : '> > +> this> .toString());> > }> > public> void> colorInfo()> > {> > System.out.println(> 'Universal Color'> );> > }> }> public> class> Test {> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > c1.colorInfo();> > }> }>

Wyjście

Constructor called for : RED Constructor called for : GREEN Constructor called for : BLUE RED Universal Color 

Często zadawane pytania dotyczące Enum w Javie

Pytanie 1. Czy możemy utworzyć instancję Enum za pomocą nowego słowa kluczowego?

Lata:

Nie, nie możemy utworzyć instancji słowa kluczowego Enum, ponieważ zawiera ona wyłącznie prywatne konstruktory.

Pytanie 2. Czy w Enum możemy mieć metodę abstrakcyjną?

Lata:

Tak, w Enum mamy metodę abstrakcyjną.

Pytanie 3. Jaki jest cel metody wartości() w wyliczeniu?

Lata:

W Javie metoda wartości() może zostać użyta do zwrócenia wszystkich wartości znajdujących się w wyliczeniu.

Pytanie 4. Jaki jest cel metody valueOf() w wyliczeniu?

Lata:

Metoda valueOf() zwraca stałą wyliczeniową określonej wartości ciągu, jeśli istnieje.

Pytanie 5. Jaki jest cel metody ordinal() w wyliczeniu?

Lata:

Dzięki metodzie ordinal() można znaleźć każdy stały indeks wyliczeniowy, podobnie jak indeks tablicy.

Pytanie 6. Napisz program w języku Java opisujący użycie metod wartości(), valueOf() i ordinal() w wyliczeniu.

Lata:

Jawa




// Java program to demonstrate working of values(),> // ordinal() and valueOf()> enum> Color {> > RED,> > GREEN,> > BLUE;> }> public> class> Test {> > public> static> void> main(String[] args)> > {> > // Calling values()> > Color arr[] = Color.values();> > // enum with loop> > for> (Color col : arr) {> > // Calling ordinal() to find index> > // of color.> > System.out.println(col +> ' at index '> > + col.ordinal());> > }> > // Using valueOf(). Returns an object of> > // Color with given constant.> > // Uncommenting second line causes exception> > // IllegalArgumentException> > System.out.println(Color.valueOf(> 'RED'> ));> > // System.out.println(Color.valueOf('WHITE'));> > }> }>

Wyjście

RED at index 0 GREEN at index 1 BLUE at index 2 RED 

Następny artykuł na temat wyliczenia: Wyliczenie z niestandardową wartością w Javie