Plik Wyliczenie w jest sposobem definiowania klasy z ustalonymi i nazwanymi stałymi z ich odpowiednimi używając słowa kluczowego enum. W tym ' Samouczek Java Enum ”, Nauczymy sięzdefiniuj wyliczenie wraz zprzykłady dla lepszego zrozumienia.
- Co to jest wyliczenie?
- Dlaczego potrzebujemy wyliczenia?
- Różnice między Enum i Class
- Praktyczne przykłady Enum
- Zalety Enum
- Enum Usecase: Rock, Papier, gra w nożyczki
Co to jest wyliczenie?
Java Enums to klasy, które mają ustalony zestaw stałych lub zmiennych, które nie zmieniają się. Wyliczenie w Javie odbywa się za pomocą słowa kluczowego enum. Java enum stałe są statyczny i finał niejawnie. Funkcja Enum jest dostępna od JDK w wersji 1.5.
Dlaczego potrzebujemy wyliczenia?
enum poprawia bezpieczeństwo typów podczas sprawdzania w czasie kompilacji, aby uniknąć błędów w czasie wykonywania, unikając kodu standardowego. Na przykład, jeśli musisz wybrać jedną możliwość z najmniejszej liczby dostępnych opcji, powiedzmy,
Praca Rodzaj: (Kontrakt / Chwilowy / Stały)
Wtedy najlepszą opcją byłoby użycie enum. Dlatego enum można go łatwo zastosować w przełączniku. enum można przejść. enum mogą mieć pola, konstruktory i metody. W związku z tym, zwiększa sprawdzanie czasu kompilacji i pozwala uniknąć błędów spowodowanych przekazaniem nieprawidłowych stałych, ponieważ już udokumentowałeś, które wartości są dozwolone do użycia.
Różnice między Enum i Class
Chociaż klasa i wyliczenie mają podobną funkcjonalność w środowisku Java, różnią się w kilku aspektach. Omówmy różnice
Enum | Klasa |
Stałych wyliczenia nie można zastąpić | Stałe klasy można przesłonić |
Enum nie obsługuje tworzenia obiektów | Klasa obsługuje tworzenie obiektów |
Enum nie może rozszerzać innych klas | Klasa może rozszerzać inne klasy |
enum cinterfejs narzędzia | Klasa może implementować Interface |
Praktyczne przykłady Enum
Teraz, aby lepiej zrozumieć wyliczenie, wykonajmy kilka praktycznych przykładów w oparciu o poniższe.
- Definiowanie wyliczenia w Javie
- Wyliczenie używane w przypadku przełącznika
- Dziedziczenie przy użyciu wyliczenia
- Wyliczenie z niestandardowymi wartościami
- Wyliczenie w instrukcjach if-else-if
- Różne metody używane z wyliczeniem
Definiowanie wyliczenia w Javie
Wyliczenie można zadeklarować wewnątrz klasy lub poza cpozwolić. Ale nie można tego zadeklarować w żadnej metodzie. Weźmy mały przykład, aby zrozumieć jego składnię, definicję i deklarację.
Składnia:
nazwa wyliczenia {stałe}
W tym przykładzie zadeklarowaliśmy Główny() metoda wewnątrz enum
definicja pakietu klasa publiczna Edureka {wyliczenie Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}
// Ouput
KTM
W tym przykładzie Główny() metoda jest zadeklarowana na zewnątrz of enum.
definicja pakietu wyliczenie Kolor {BAJAJ, KTM, YAMAHA} klasa publiczna Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}
//Wynik:
YAMAHA
Wyliczenie używane w przypadku przełącznika
Wyliczenie może być również używane w instrukcji switch. Ważne jest, aby wszystkie instrukcje case musiały używać stałych z tego samego wyliczenia, które jest używane przez instrukcję switch. Sprawdźmy oparty na tym przykład.
Tutaj zadeklarujemy wyliczenie z dniami tygodnia jako jego elementami i przekażemy dane w postaci ciągu do wydrukowania danych pasującego przypadku.
pakiet przełączony wyliczenie Dzień {NIEDZIELA, PONIEDZIAŁEK, WTOREK, ŚRODA, CZWARTEK, PIĄTEK, SOBOTA} klasa publiczna Edureka {Dzień publiczny Edureka (Dzień dzień) {this.day = dzień} public void dayIsLike () {switch (day) {case PONIEDZIAŁEK: System.out.println ('Cześć, dzisiaj jest poniedziałek') przypadek przerwy WTOREK: System.out.println ('Cześć, dziś jest wtorek') przypadek przerwy ŚRODA: System.out.println ('Cześć, dzisiaj jest środa ') przypadek przerwy CZWARTEK: System.out.println (' Cześć, dzisiaj jest czwartek ') przypadek przerwy PIĄTEK: System.out.println (' Witaj, dzisiaj jest piątek. ') przypadek przerwy SOBOTA: System.out.println (' Cześć, dziś jest Twój weekend ”) przypadek przerwy NIEDZIELA: System.out.println („ Cześć, dziś jest święto ”) break default: System.out.println („ Proszę podać prawidłowy dzień. ”) Break}} public static void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}
//Wynik:
Cześć, dziś jestponiedziałek
Dziedziczenie przy użyciu wyliczenia
Zasadniczo dowolny enum jest reprezentowana jako klasa, która rozszerza klasę abstrakcyjną java.lang. Enum i ma kilka statycznych elementów członkowskich. Dlatego plik enum nie może rozszerzyć żadnej innej klasy ani enum nie ma wielokrotności spadki . Wykonajmy przykład, aby lepiej to zrozumieć.
Tutaj odziedziczymy system operacyjny oparty na producencie telefonu.
dziedziczenie pakietów import java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) for (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} interfejs statyczny HTTPMethodConvertible {public String getHTTPMethodType ()} statyczne wyliczenie LibraryEnum implementuje HTTPMethodConvertible {FIRST ('Google Pixel'), SECOND ('Google Pixel') 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementuje HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}
//Wynik:
Google Pixel
Android One
framework hybrydowy w selenium webdriver
Wyliczenie z niestandardowymi wartościami
Wyliczenia mają domyślnie własne wartości ciągów, możemy również przypisać niektóre wartości niestandardowe do wyliczeń. Rozważmy poniższy przykład.
enum Traffic {RED („STOP”), ORANGE („WAIT”), GREEN („GO”)}
W powyższym przykładzie widzimy, że wyliczenie ruchu ma trzech członków. Mianowicie,
CZERWONY POMARAŃCZOWY i ZIELONY mają własne różne wartości niestandardowe STOP, CZEKAJ i UDAĆ SIĘ odpowiednio.
Teraz, aby użyć tego samego typu wyliczenia w kodzie, powinniśmy przestrzegać kilku punktów:
- Musimy tworzyć konstruktor sparametryzowany dla tej klasy wyliczenia. Ponieważ o tym wiemy enum obiektu class nie można utworzyć jawnie, więc do inicjalizacji używamy konstruktora sparametryzowanego.
- Plik budowniczy nie może być publiczna ani chroniona, którą musi mieć prywatny lub domyślna modyfikatory. Jeśli utworzymy publiczne lub chronione, pozwoli to na zainicjowanie więcej niż jednego obiektu, który jest całkowicie przeciwko enum funkcjonalność.
- Musimy stworzyć metodę pobierającą, aby uzyskać wartość wyliczenia.
Wykonajmy na tej podstawie program.
pakiet ruchu enum TrafficSignal {CZERWONY ('STOP'), ZIELONY ('GO'), POMARAŃCZOWY ('CZEKAJ') private String akcja 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 ('name:' + signal.name () + 'akcja:' + signal.getAction ())}}}
//Wynik:
nazwa: CZERWONA akcja: STOP
nazwa: ZIELONA akcja: GO
męskie: POMARAŃCZOWA akcja: CZEKAJ
Wyliczenie w instrukcjach if-else-if
Teraz wykonajmy program oparty na wyliczenie w instrukcjach if-else-if. Tutaj znajdziemy kierunek przemierzania, przekazując wartości kierunków dostępne w wyliczeniu.
pakiet Dojazd enum Wskazówki {WSCHÓD, ZACHÓD, PÓŁNOC, POŁUDNIE} public class Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Direction: East')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Direction : North ')} else {System.out.println (' Direction: South ')}}}
//Wynik:
Mówićction: North
Różne metody używane z wyliczeniem
Wartości (): Podczas tworzenia wyliczenia Kompilator Java wewnętrznie dodaje wartości () metoda. Ta metoda zwraca plik szyk zawierający wszystkie wartości wyliczenia.
//Składnia:
publiczne statyczne wartości typu wyliczenia [] ()
Dowiemy się, jaka jest wartość indeksu konkretnego elementu tablicy.
wartości pakietu wyliczenie 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 + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}
//Wynik:
php wstaw do tablicy $ table
CZERWONY przy indeksie 0
ZIELONY przy indeksie 1
NIEBIESKI w indeksie 2
NETTO
Wartość(): Tosłuży do zwracania stałej wyliczenia, której wartość jest równa przekazywane jako argument podczas wywoływania tej metody.
//Składnia:
public statyczny typ wyliczenia valueOf (String str)
Tutaj znajdziemy koszt konkretnego telefonu na podstawie danych wejściowych, które przekazujemy do ciągu.
wartości pakietu enum 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:') for (Mobile m: Mobile.values ()) {System.out.println (m + 'koszty' + m.showPrice () + 'dolary' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Wybrano:' + ret)}}
//Wynik:
Samsung kosztuje 1099 dolarów
Apple kosztuje 1250 dolarów
Google kosztuje 1325 dolarów
Wybrano: Samsung
Porządkowy(): Interpreter języka Java dodaje rozszerzenie porządkowy() metoda wewnętrznie, gdy tworzy plik enum. Metoda ordinal () zwraca indeks wartości wyliczenia.
//Składnia:
public final int ordinal ()
Tutaj poznamy wartość indeksu konkretnego elementu w tablicy. a także położenie owocu wiśni.
Package ordinal enum Owoce {Jabłko, Banan, Wiśnia, Daktylowiec, Bezsz} Wyliczenie Warzywa {Marchewka, Burak, Fasola, Pomidor, Cebula} klasa publiczna Edureka {public static void main (String [] args) {Fruits [] fru = owoce. wartości () for (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Owoce f1, f2, f3 f1 = Owoce.Apple f2 = Owoce.Cherry f3 = Owoce.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'przychodzi po' + f1)} Warzywa v1 = Warzywa.Beetroot if (f1.equals (v1)) {System.out.println (' Niepoprawne ')}}}
//Wynik:
Jabłko: 0
Banan: 1
Wiśnia: 2
Data: 3
Czarny bez: 4
Cherry przychodzi po Apple
Zalety Enum
- Enum w Javie poprawia się bezpieczeństwo typu
- Enum został zaprojektowany tak, aby był łatwy w użyciu w przełączniki
- Enum może być przeszedł
- Enum może mieć pola, metody, i konstruktorzy
- Enum może implementować interfejsy
- Enum nie może rozszerzyć pliku klasa ponieważ wewnętrznie się rozszerza Enum klasa
Enum Zastosowanie: kamień, papier, nożyczki
Użyjemy enum w Javie, aby stworzyć naszą grę z dzieciństwa, kamień (kamień), papier i nożyczki . Poniższy kod wyjaśnia, jak to zrobić.
pakiet 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 () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('nLet us begin ... n') while (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nYour turn (Please Enter s for a sciss, p for paper, t for stone, q to quit): 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 ( 'nProszę sprawdzić dane wejściowe i spróbować ponownie! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My turn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor tnie papier , Wygrałem! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper okłada kamień, wygrałem! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone łamie nożyce, wygrałem! n') ++ numComputerWon} else {System.out.println ('nGratulacje. ..! Wygrałeś! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nLiczba prób: '+ numTrials) System.out.printf (' Wygrałem% d (%. 2f %%) . Wygrałeś% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Do widzenia !, Mam nadzieję, że podobało Ci się ...! ' )}}
//Wynik:
Zacznijmy ...
Nożyce-papier-kamień
Twoja kolej (wpisz s jak nożyczki, p jak papier, t jak kamień, q, aby zakończyć):
s
Teraz moja kolej: KAMIEŃ
Kamień łamie nożyce, wygrałem!
Nożyce-papier-kamień
Twoja kolej (wpisz s jak nożyczki, p jak papier, t jak kamień, q, aby zakończyć):
co
Liczba prób: 1 Wygrałem 1 (100,00%). Wygrałeś 0 (0,00%).
Do widzenia !, Mam nadzieję, że podobało Ci się ..!
W ten sposób dochodzimy do końca tego samouczka Java Enum. Mam nadzieję, że zrozumiałeś Enum w Javie i jego implementację na kilku przykładach w czasie rzeczywistym.
Teraz, kiedy zrozumiałeś enum podstawy w tym „samouczku Java Enum”, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenia i kursy certyfikacyjne dotyczące Java J2EE i SOA firmy Edureka są przeznaczone dla studentów i profesjonalistów, którzy chcą zostać programistą Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji Java, a także różnych struktur Java, takich jak Hibernate i Wiosna .
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy tego bloga „Java Enum Tutorial”, a skontaktujemy się z Tobą tak szybko, jak to możliwe.