java enum java enumeration tutorial with examples
W tym samouczku omówimy klasę i konstruktor Java Enum. Dowiemy się, jak używać Enum na różnych przykładach programowania w Javie:
Jest to specjalna klasa, której wyjaśnienie zostanie szczegółowo opisane. Podany zostanie wgląd w klasę Java Enum wraz z listą obsługiwanych przez nią metod.
Aby ułatwić zrozumienie, w tym samouczku zamieszczono wystarczające programy, które implementują koncepcje wyliczenia w języku Java, a także niektóre często zadawane pytania, które mogą być zadawane podczas wywiadów.
=> Zajrzyj tutaj, aby zobaczyć serię szkoleń Java dla wszystkich.
Czego się nauczysz:
Wyliczenie Java
Wyliczenie w Javie to nic innego jak lista zmiennych instancji, metod lub konstruktorów. To jest grupa stałych. Koncepcja wyliczenia została wprowadzona w JDK5. Właściwością domyślną każdej stałej wyliczenia jest public, static i final.
enum Keyword
Wyliczenie jest tworzone za pomocą słowa kluczowego o nazwie „ enum ”.
Poniżej podano składnię, za pomocą której możemy utworzyć wyliczenie.
Składnia:
enum enumerated_type_name
{
enumerator1, enumerator2,… enumeratorN;
}
Uwaga: wyliczenie można zdefiniować tylko w klasie lub interfejsie najwyższego poziomu lub w kontekście statycznym. Nie powinno znajdować się wewnątrz metody.
enum Przykład
W tym przykładzie mamy zamiar zainicjować cztery wyliczające, tj. Pik, kier, karo i trefl należące do wyliczonego typu zwanego kartami.
Następnie spróbujemy wydrukować każdy z tych wyliczaczy.
/* * created an enumeration called cards * with four enumerators. */ enum cards { spade, club, heart, diamond; } public class A { public static void main(String() args) { /* * stored each of the enumerators in the * reference variables a1,a2,a3,a4 respectively. * note that the new keyword was not used here */ cards a1 = cards.spade; cards a2 = cards.club; cards a3 = cards.heart; cards a4 = cards.diamond; System.out.println('Enumerators are: '+ a1 + ',' + a2 + ',' + a3 + ',' + a4); } }
Wynik:
Klasa wyliczeniowa
Jedną rzeczą, którą musieliście zauważyć w powyższym przykładzie (patrz komentarze), jest to, że nie używaliśmy pliku „Nowe słowo kluczowe” podczas tworzenia wystąpienia. Chociaż wyliczenia definiują klasę Enum i konstruktory, nie używają one nowego słowa kluczowego.
Możemy użyć modułów wyliczających zdefiniowanych w taki sam sposób jak prymityw. Enum jest klasą ogólną i wszystkie wyliczenia dziedziczą Enum.
Składnia:
// E to typ wyliczenia.
klasa Enum
Jak używać Enum w Javie
Zobaczmy, jak używać Enum w różnych scenariuszach z pomocą przykładów w Javie:
Wewnątrz klasy A.
Enum można zadeklarować wewnątrz lub na zewnątrz (przykład słowa kluczowego enum) w klasie, ale nie wewnątrz metody. Tutaj pokażemy, jak wyliczenie jest deklarowane wewnątrz klasy.
W poniższym przykładzie , stworzyliśmy wyliczenie wewnątrz klasy, a następnie pobraliśmy wartość lub moduł wyliczający za pomocą zmiennej referencyjnej a1.
public class A { /* * created an enumeration called cards * with four enumerators. */ enum cards { spade, club, heart, diamond; } public static void main(String() args) { /* * stored each of the enumerators in the * reference variables a1. * note that the new keyword was not used here */ cards a1 = cards.heart; System.out.println('Card is: '+ a1); } }
Wynik:
Iterowanie wyliczenia przez pętle
Tutaj omówimy, w jaki sposób możemy zapętlić wyliczenie. Zadeklarowaliśmy wyliczenie z czterema modułami wyliczającymi (poza klasą). Następnie zainicjowaliśmy pętlę for each (wewnątrz klasy) i spróbowaliśmy pobrać wartość modułów wyliczających.
/* * created an enumeration called games * with four enumerators. */ enum games { ludo, Chess, Badminton, Cricket; } public class A { public static void main(String() args) { /* * used forEach loop and stored the value in 'index' * and printed the value of each enumerator */ System.out.println('Using for each loop'); for (games index:games.values()) { System.out.println(index); } } }
Wynik:
jaki jest mój klucz bezpieczeństwa wifi
W if-else
W poniższym programie utworzyliśmy wyliczenie z trzema różnymi modułami wyliczającymi, a następnie umieściliśmy go w zmiennej referencyjnej dla jednego z określonych modułów wyliczających.
Następnie rozpoczęliśmy sprawdzanie warunku if, w którym zaimplementowaliśmy dwa warunki określone za pomocą OR, więc jeśli jeden z tych warunków zostanie spełniony, wypisze instrukcję określoną w warunku if.
W przeciwnym razie wydrukuje instrukcję określoną w warunku else.
/* * created an enumeration called players * with three enumerators. */ enum players { sachin, virat, dhoni; } public class A { public static void main(String() args) { /* * stored enumerator in reference variable a1 for * contant dhoni */ players a1 = players.dhoni; /* * Started if statement with OR condition. * If any of these conditions are met then it will * print the statement specified inside if statement */ if(a1 == players.virat || a1 == players.sachin) { System.out.println('Sachin and Virat are greatest batsmen'); } /* * if none of the above condition is met then it will * print the below specified statement */ else { System.out.println('Dhoni is the best Captain'); } } }
Wynik:
W instrukcji Switch
W poniższym programie stworzyliśmy wyliczenie z czterema modułami wyliczającymi. Następnie zapisaliśmy jeden z modułów wyliczających w zmiennej referencyjnej. Następnie zainicjowaliśmy instrukcję Switch i sprawdziliśmy każdy z tych modułów wyliczających.
Po wystąpieniu tego konkretnego modułu wyliczającego wydrukuje instrukcję określoną w konkretnym przypadku.
/* * created an enumeration called players * with four enumerators. */ enum players { sachin, dravid, virat, dhoni; } public class A { public static void main(String() args) { /* * stored enumerator in reference variable a1 for * contant dravid */ players a1 = players.dravid; /* * Started Switch Statement and if the element * matches with a1 then it will print the statement * specified in the case */ switch(a1) { // does not match case sachin: System.out.println('Sachin is best bastman ever'); break; // matches case dravid: System.out.println('Dravid is the best Test Batsman'); break; // does not match case virat: System.out.println('Virat is modern great'); break; // does not match case dhoni: System.out.println('Dhoni is the best captain ever'); break; } } }
Wynik:
Pole i metody wyliczenia
Pole wyliczenia
W tej sekcji szczegółowo wyjaśniono pole wyliczenia. Możemy dodawać pola do wyliczenia Java i każdy moduł wyliczający otrzymuje te pola. Wartość pola należy przypisać konstruktorowi wyliczenia.
W poniższej składni widzimy, że wyliczenie zostało zdefiniowane z trzema modułami wyliczającymi. Oprócz każdego modułu wyliczającego zdefiniowaliśmy pole typu int. ( Na przykład. - odpowiednio (3), (2) i (1)).
To sumuje, że wyliczenie Java ma konstruktor, który przyjmuje int. Ten konstruktor ustawia pole int. Po zdefiniowaniu modułu wyliczającego ta wartość int (określona dla tego modułu wyliczającego) jest przekazywana do konstruktora.
Składnia:
public enum A { /* * calls a contructor with value * defined on the respective enumerator */ Enumerator1(3), Enumerator2(2), Enumerator3(1) /* * semicolon needed for the last enumerator * if there is a method following it. */ ; private final int constant; private A(int constant) { this.constant = constant; } }
Uwaga: Na przykład w polu Enum należy zapoznać się z sekcją „ Konstruktor wyliczenia ”.
Metody wyliczeniowe
# 1) nazwa ()
public final String name () - zwraca nazwę stałej wywołującej (niezmienionej lub niezmienionej).
# 2) równa się ()
public final boolean equals (Object other) - zwraca wartość true, jeśli obj, a obiekt wywołujący odwołuje się do tej samej stałej.
# 3) toString
public String toString () - zwraca nazwę stałej wywołującej. Niekoniecznie pasuje do nazwy użytej w deklaracji wyliczenia.
# 4) klon
chroniony finalny klon obiektu ()
zgłasza CloneNotSupportedException - oznacza to, że wyliczenie zgłosi wyjątek podczas próby sklonowania.
# 5) hashCode ()
public final int hashCode () - zwraca kod skrótu dla wywołującego obiektu.
# 6) finalizuj ()
protected final void finalize () - klasa enum nie może mieć sfinalizowanych metod. Brak wartości zwracanej.
# 7) compareTo ()
public final int compareTo (E obj) - porównuje wyliczenie z określonym obiektem obj. Zwraca wartość ujemną, jeśli obiekt jest mniejszy niż określony obiekt. Zwraca wartość dodatnią, jeśli ten obiekt jest większy niż określony obiekt obj, i zwraca zero, jeśli określony obiekt jest równy temu obiektowi.
# 8) getDeclaringClass
public final Class getDeclaringClass () - zwraca typ wyliczenia (znany również jako klasa deklarująca wyliczenie), którego członkiem jest stała wywołująca.
# 9) porządkowa (), wartości () i valueOf ()
Wszystkie te metody są częścią pakietu java.lang.Enum . Metoda ordinal () zwraca kolejność stałej wyliczenia na podstawie indeksu stałej.
Metoda values () zwraca wszystkie wartości obecne w wyliczeniu. Metoda valueOf (String) zwraca stałą wyliczenia wejściowego ciągu znaków. Jeśli określony ciąg nie jest dopasowany do stałej, zgłosi wyjątek IllegalArgumentException.
Poniżej podano przykład programowania, w którym użyliśmy tego samego przykładu (jako przykład słowa kluczowego enum) i zaimplementowaliśmy koncepcję wszystkich trzech metod.
/* * created an enumeration called cards * with four enumerators. */ enum cards { spade, club, heart, diamond; } public class A { public static void main(String() args) { /* * created an array arr() which will store the * value of the constants/enumerators declared in the enumeration */ cards arr() = cards.values(); /* * used forEach loop and stored the value in 'type' * and printed the value as well as index with the help of * ordinal() method */ for (cards type:arr) { System.out.println(type + ' occurs at ' + type.ordinal()); } /* * passed heart as an input String which matches with the * constant declared in 'cards' */ System.out.println(cards.valueOf('heart')); } }
Wynik:
Konstruktor wyliczenia
Enum (ponieważ jest to również klasa) obsługuje konstruktora do przekazywania danych podczas tworzenia modułów wyliczających lub znanych również jako stałe wyliczenia.
Główną właściwością konstruktora wyliczenia jest to, że jest to pakiet prywatny lub pakiet prywatny. Oznacza to, że są dostępne w klasie lub w pakiecie.
Zobaczmy poniższy przykład. Tutaj wykorzystaliśmy zarówno metodę, jak i konstruktora. Przede wszystkim stworzyliśmy wyliczenie o nazwie „gracze”, które ma pięciu wyliczających i pole.
Następnie mamy konstruktora i metodę, która zwróci liczbę przebiegów uzyskanych przez każdego gracza lub moduł wyliczający lub stałą wyliczeniową.
Następnie mamy główną klasę, w której używaliśmy for każdej pętli z metodą values () do przechowywania i iteracji każdego modułu wyliczającego. Ponadto nazwaliśmy metodę dla liczby runów zdobytych przez każdego gracza.
/* * Created enumeration players with the field. * Declared a constructor and a method to return * the number of runs scored by the players. */ enum players { dravid(10889), sachin(18426), ganguly(11363), virat(11867), dhoni(10773) ; private int runs; /* * Created enumeration players with the field. * Declared a constructor and a method to return * the number of runs scored by the players. */ enum players { dravid(10889), sachin(18426), ganguly(11363), virat(11867), dhoni(10773) ; private int runs; players(int r) { runs = r; } int getRuns() { return runs; } } /* * Used values() method to get the enumerators and a for each loop * to get the number of runs scored by each player */ public class A { public static void main(String args()) { for (players a : players.values()) System.out.println(a + ' has scored ' + a.getRuns() + ' ODI runs'); } }
Wynik:
Często Zadawane Pytania
P # 1) Jaka jest różnica między Iteratorem a wyliczaniem w Javie?
Odpowiedź: Poniżej podano różnicę między Iteratorem a Enumeracją.
Iterator | Wyliczenie |
---|---|
Jest to ogólny kursor, który jest używany do iteracji elementów i ma zastosowanie do wszystkich klas kolekcji. | Nie jest to ogólny kursor, ponieważ ma zastosowanie tylko do starszych klas, takich jak Enum. Tylko uprawnienia do odczytu dla klasy kolekcji. |
Niektóre metody to hasNext (), next () do iteracji. | Niektóre metody to hasMoreElements (), nextElement () do iteracji. |
Możemy usunąć element w kolekcji za pomocą iteratora. | Nie możemy usunąć elementu w kolekcji przy użyciu Enumeration, ponieważ ma on tylko uprawnienia do odczytu. |
Pytanie 2) Jak Enum obsługuje dziedziczenie?
Odpowiedź: Afterall Enum jest również klasą w Javie, więc musi obsługiwać dziedziczenie, które jest podstawową zasadą OOPS. Wszystkie wyliczenia rozszerzają klasę java.lang.Enum. Ponieważ klasa może rozszerzać tylko jednego rodzica, klasa Enum nie rozszerza żadnej innej.
Metoda toString (), która jest częścią klasy Enum (opisana w sekcji Metoda Enum) jest nadpisywana w klasie java.lang.Enum.
Wniosek
W tym samouczku omówiliśmy wyliczenia, moduły wyliczające, klasę Java Enum i słowo kluczowe enum wraz z odpowiednimi przykładami i objaśnieniami w razie potrzeby. Podaliśmy również wgląd w ważne metody związane z klasą Enum z polem wyliczenia.
Zapewniono wgląd w konstruktora, wyliczenie z if-else, przełącznik i pętle.
=> Odwiedź tutaj, aby nauczyć się języka Java od podstaw.
rekomendowane lektury
- Samouczek klasy skanera Java z przykładami
- Klasa Java Integer i Java BigInteger z przykładami
- Samouczek Java Float z przykładami programowania
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- TreeMap w Javie - samouczek z przykładami TreeMap w języku Java
- Java Double - samouczek z przykładami programowania
- Java Array Class Tutorial - klasa java.util.Arrays z przykładami
- Pojęcia w języku C #: konstruktor, niszczyciel, klasa statyczna, struktura i wyliczenie