The Popisivanje u je način definiranja klase s fiksnim i imenovanim konstantama s njihovim odgovarajućim pomoću ključne riječi nabrajanje. U ovom “ Vodič za Java Enum ”, Naučit ćemodefinirati nabrajanje zajedno saprimjeri za bolje razumijevanje.
- Što je popisivanje?
- Zašto nam treba popisivanje?
- Razlike između enuma i klase
- Praktični primjeri Enuma
- Prednosti Enuma
- Enum Usecase: Rock, Papir, igra škarama
Što je popisivanje?
Java Enums su klase koje imaju fiksni skup konstanti ili varijabli koje se ne mijenjaju. Nabrajanje u Javi postiže se pomoću ključne riječi nabrajanje. Java nabrajanje konstante su statički i konačni implicitno. Značajka Enum dostupna je od JDK verzija 1.5.
Zašto nam treba popisivanje?
nabrajanje poboljšava sigurnost tipa prilikom provjere vremena kompajliranja kako bi se izbjegle pogreške u toku izvođenja izbjegavanjem koda uzorka. Na primjer, ako morate odabrati najmanju mogućnost od najmanje dostupnih opcija, recimo,
Posao Tip: (Ugovor / Privremeni / Stalno)
Tada bi najbolja opcija bila upotreba nabrajanje. Jer nabrajanje može se lako koristiti u prekidaču. nabrajanje može se preći. nabrajanje limenka imati polja, konstruktori i metode. Stoga, povećava provjeru vremena kompajliranja i izbjegava pogreške zbog unošenja nevažećih konstanti, jer ste već dokumentirali koje su vrijednosti legalne za upotrebu.
Razlike između enuma i klase
Iako klasa i enum imaju sličnu funkcionalnost u Java okruženju, razlikuju se u nekoliko aspekata. Razgovarajmo o razlikama
Enum | Razred |
Ne može se nadjačati enumske konstante | Konstante razreda mogu se nadjačati |
Enum ne podržava Stvaranje objekata | Razred podupire Stvaranje predmeta |
Enum ne može produžiti druge razrede | Razred može proširiti druge razrede |
nabrajati csučelje za provedbu | Klasa može implementirati sučelje |
Praktični primjeri Enuma
Sada, da bismo puno bolje razumjeli nabrajanje, izvršimo nekoliko praktičnih primjera na temelju sljedećeg.
- Definiranje nabrajanja u Javi
- Enum korišten u kućištu prekidača
- Nasljeđivanje pomoću enum
- Enum s prilagođenim vrijednostima
- Nabroji u if-else-if izjavama
- Različite metode korištene s enumom
Definiranje nabrajanja u Javi
Enum se može deklarirati unutar klase ili izvan cneka. Ali, to se ne može deklarirati ni u jednoj metodi. Uzmimo mali primjer da bismo razumjeli njegovu sintaksu, definiciju i deklaraciju.
Sintaksa:
ime nabrajanja {konstante}
U ovom smo primjeru proglasili glavni() metoda iznutra nabrajanje
definicija paketa javna klasa Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}
// Izlazak
što je logger u javi
KTM
U ovom primjeru, glavni() deklarirana metoda izvana od nabrajanja.
definicija paketa enum Boja {BAJAJ, KTM, YAMAHA} javna klasa Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}
//Izlaz:
YAMAHA
Enum korišten u kućištu prekidača
Nabrajanje se može koristiti i u naredbi prekidača. Važno je da svi izrazi slučaja moraju koristiti konstante iz istog nabrajanja kao što ih koristi naredba switch. Provjerimo primjer temeljen na ovome.
Ovdje ćemo proglasiti enum s danima u tjednu kao njegove elemente i proslijedit ćemo podatke u obliku niza za ispis podataka odgovarajućeg slučaja.
paket prebačen enum Dan {NEDJELJA, PONEDJELJAK, UTORAK, SRIJEDA, ČETVRTAK, PETAK, SUBOTA} javni razred Edureka {Dan dan javni Edureka (Dan dan) {this.day = day} public void dayIsLike () {switch (day) {case PONEDJELJAK: System.out.println ('Bok, danas je ponedjeljak') slučaj slučaja UTORAK: System.out.println ('Bok, danas je utorak') slučaj case SRIJEDA: System.out.println ('Bok, danas je srijeda ') slučaj slučaja ČETVRTAK: System.out.println (' Bok, danas je četvrtak ') slučaj slučaja PETAK: System.out.println (' Pozdrav, danas je petak. ') slučaj slučaja SUBOTA: System.out.println (' Bok, danas je tvoj vikend ') slučaj prekida NEDJELJA: System.out.println (' Bok, danas je praznik ') stanka zadana: System.out.println (' Unesite važeći dan. ') Break}} public static void main (String [] args) {String str = 'PONEDJELJAK' Edureka e1 = nova Edureka (Day.valueOf (str)) e1.dayIsLike ()}}
//Izlaz:
Bok, danas jeponedjeljak
Nasljeđivanje pomoću enum
U osnovi, bilo koji nabrajanje predstavljen je kao klasa koja proširuje apstraktnu klasu java.lang. Enum i ima nekoliko statičnih članova. Stoga je an nabrajanje ne može proširiti nijednu drugu klasu ili nabrajanje nema višestrukog baština . Izvršimo primjer kako bismo ga bolje razumjeli.
Ovdje ćemo naslijediti OS na temelju proizvođača telefona.
razlika između xml i html
nasljeđivanje paketa uvoz java.util.ArrayList uvoz java.util.List javna klasa Edureka {javna statička void glavna (String [] args) {Lista naslediti = novi ArrayList () naslediti.add (LibraryEnum.FIRST) naslediti.add (ClientEnum. google) za (HTTPMethodConvertible element: naslediti) {System.out.println (element.getHTTPMethodType ())}} statičko sučelje HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum implementira HTTPMethodConvertible {FIRST ('Google Pixel'), 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementira HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} javni String getHTTPMethodType () {return httpMethodType}}}
//Izlaz:
Google Pixel
Android One
Enum s prilagođenim vrijednostima
Enumi prema zadanim postavkama imaju vlastite vrijednosti nizova, enumima također možemo dodijeliti neke prilagođene vrijednosti. Razmotrimo donji primjer.
enum Promet {CRVENO (“STOP”), NARANČASTO (“ČEKAJ”), ZELENO (“IDI”)}
U gornjem primjeru možemo vidjeti da prometna enum ima tri člana. Naime,
CRVENA, NARANČASTA i ZELENA s imaju svoje različite prilagođene vrijednosti STAJ, ČEKAJ i IĆI odnosno.
Da bismo sada koristili isti tip enum u kodu, očekuje se da slijedimo neke točke koje su:
- Moramo stvarati parametarski konstruktor za ovaj enum razred. Jer mi to znamo nabrajanje objekt klase ne može se eksplicitno kreirati, pa za inicijalizaciju koristimo parametarski konstruktor.
- The graditelj ne može biti javnost ili zaštićena koju mora imati privatni ili zadano modifikatori. Ako stvorimo javni ili zaštićeni, to će omogućiti inicijalizaciju više od jednog objekta koji je u potpunosti protiv enum funkcionalnost.
- Moramo stvoriti getter metodu da bismo dobili vrijednost od nabrajanja.
Izvršimo program zasnovan na ovome.
paket prometa enum TrafficSignal {CRVENO ('STOP'), ZELENO ('GO'), ORANGE ('WAIT') privatna akcija String javna String getAction () {return this.action} private TrafficSignal (akcija niza) {this.action = akcija}} javna klasa Edureka {javna statička void glavna (String args []) {TrafficSignal [] signali = TrafficSignal.values () za (TrafficSignal signal: signali) {System.out.println ('name:' + signal.name () + 'akcija:' + signal.getAction ())}}}
//Izlaz:
naziv: CRVENA akcija: STOP
naziv: ZELENA akcija: IDI
muškie: NARANČASTA akcija: ČEKAJ
Nabroji u if-else-if izjavama
Izvršimo sada program temeljen na enum u if-else-if izjavama. Ovdje ćemo pronaći smjer zaokreta prenošenjem vrijednosti uputa dostupnih u nabrajanju.
paket Directions enum Smjerovi {EAST, WEST, NORTH, SOUTH} javna klasa Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Smjer: Istok')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Smjer : Sjever ')} else {System.out.println (' Smjer: Jug ')}}}
//Izlaz:
Rećiktion: Sjever
Različite metode korištene s enumom
Vrijednosti (): Kada stvorite nabrajanje, Java kompajler interno dodaje vrijednosti () metoda. Ova metoda vraća niz koji sadrži sve vrijednosti nabrajanja.
//Sintaksa:
javne statičke vrijednosti tipa enum [] ()
Saznat ćemo vrijednost indeksa određenog elementa u nizu.
vrijednosti paketa enum Boja {CRVENA, ZELENA, PLAVA} javna klasa Edureka {javna statička void glavna (String [] args) {Color arr [] = Color.values () za (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('CRVENA'))}}
//Izlaz:
CRVENA na indeksu 0
ZELENA u indeksu 1
PLAVO kod indeksa 2
NETO
Vrijednost(): Ovajmetoda koristi se za vraćanje konstante nabrajanja čija je vrijednost jednaka prošao kao argument tijekom poziva ove metode.
//Sintaksa:
javna statička vrijednost tipa enum (String str)
Ovdje ćemo pronaći cijenu određenog telefona na temelju unosa koji prosljeđujemo u niz.
vrijednosti paketa enum Mobile {Samsung (1099), Apple (1250), Google (1325) int cijena Mobile (int p) {price = p} int showPrice () {return price}} javna klasa Edureka {public static void main (String args []) {System.out.println ('Popis mobitela:') za (Mobile m: Mobile.values ()) {System.out.println (m + 'troškovi' + m.showPrice () + 'dolara' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Odabrano:' + ret)}}
//Izlaz:
Samsung košta 1099 dolara
Apple košta 1250 dolara
Google košta 1325 dolara
Odabrano: Samsung
Redni(): Java interpreter dodaje redni() metoda interno kada kreira nabrajanje. Metoda ordinal () vraća indeks vrijednosti nabrajanja.
//Sintaksa:
javni konačni interni ()
Ovdje ćemo saznati vrijednost indeksa određenog elementa u nizu. a također i položaj ploda trešnje.
Paket redni enum Voće {Apple, Banana, Cherry, Date, Elderberry} enum Povrće {mrkva, cikla, grah, rajčica, luk} javna klasa Edureka {public static void main (String [] args) {Voće [] fru = Voće. vrijednosti () za (Voće fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Voće f1, f2, f3 f1 = Voće.Jabuka f2 = Voće.Češnja f3 = Voće.Jabuka if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'dolazi iza' + f1)} Povrće v1 = Povrće.Beetroot if (f1.equals (v1)) {System.out.println (' Netočno') } } }
//Izlaz:
Jabuka: 0
Banana: 1
Trešnja: 2
Datum: 3
Bazga: 4
Trešnja dolazi nakon Applea
Prednosti Enuma
- Enum u Javi se poboljšava vrsta sigurnosti
- Enum je dizajniran da se lako koristi u preklopna kućišta
- Enum može biti prešao
- Enum može imati polja, metode, i konstruktori
- Enum može implementirati sučelja
- Enum ne može proširiti a razred jer se iznutra proteže Enum razred
Enum Usecase: Rock, Paper, Škare igra
Koristit ćemo nabrajanje na Javi kako bismo stvorili našu igru iz djetinjstva, kameni (kameni) papir i škare . Sljedeći kod objašnjava kako.
datum tipa podataka u primjeru sql
paket Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} javna klasa 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 Skener u = novi skener (System.in) System.out.println ('nPočnimo ... n'), dok (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nVaš red (Molimo unesite s za škare, p za papir, t za kamen, q za prekid): 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 ( 'nProvjerite unos i pokušajte ponovo! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIs moj red: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIs moj red: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIs moj red: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt is a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nNcisica reže papir , Pobijedio sam! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper omotava kamen, pobijedio sam! N ') ++ numComputerWon} inače ako (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone lomi škare, pobijedio sam! n') ++ numComputerWon} else {System.out.println ('nČestitamo. ..! Pobijedili ste! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nBroj proba: '+ numTrials) System.out.printf (' Pobijedio sam% d (%. 2f %%) . Osvojili ste% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Zbogom, nadam se da ste uživali ..! ' )}}
//Izlaz:
Počnimo ...
Makaze-papir-kamen
Vaš red (Unesite s za škare, p za papir, t za kamen, q za prekid):
s
Na meni je red: KAMEN
Kamen lomi škare, pobijedio sam!
Makaze-papir-kamen
Vaš red (Unesite s za škare, p za papir, t za kamen, q za prekid):
što
Broj pokusa: 1I pobijedio sam 1 (100,00%). Osvojili ste 0 (0,00%).
Ćao !, nadam se da ste uživali ..!
Ovim smo došli do kraja ovog vodiča za Java Enum. Nadam se da ste razumjeli Enum u Javi i njegovu primjenu kroz neke primjere u stvarnom vremenu.
Sad kad ste shvatili nabrajanje osnove kroz ovaj 'Java Enum Tutorial' pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekini tečajevi za obuku i certificiranje Java J2EE i SOA dizajnirani su za studente i profesionalce koji žele biti programer za Javu. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Proljeće .
Imate pitanje za nas? Spomenite ga u odjeljku za komentare na ovom blogu 'Java Enum Tutorial' i javit ćemo vam se što je prije moguće.