Java Enum apmācība: kas tas ir un kā to īstenot?



Šis raksts par Java Enum apmācību sniegs jums detalizētas zināšanas par Enum konstantēm, kā arī praktiskus piemērus labākai izpratnei.

The Skaitīšana ir veids, kā definēt klasi ar fiksētām un nosauktajām konstantēm ar attiecīgajām izmantojot atslēgvārdu enum. Šajā ' Java Enum apmācība ”Rakstu, mēs iemācīsimiesdefinēt uzskaitījumu kopā arpiemēri labākai izpratnei.

Kas ir uzskaitījums?

Java Enums ir klases, kurām ir nemainīgs konstantu vai mainīgo kopums, kam nav tendences mainīties. Java uzskaitījums tiek panākts, izmantojot atslēgvārdu enum. Java enum konstantes ir statisks un galīgais netieši. Funkcija Enum ir pieejama kopš JDK versija 1.5.





Kāpēc mums ir nepieciešams uzskaitījums?

enum uzlabo tipa drošību sastādīšanas laika pārbaudē, lai izvairītos no kļūdām izpildes laikā, izvairoties no katla plāksnes koda. Piemēram, ja jums ir jāizvēlas viena iespēja no vismazāk pieejamo opciju skaita, teiksim:

Darbs Tips: (Līgums / Pagaidu / Pastāvīgs)



Java enum apmācības darbinieks

Tad labākais risinājums būtu izmantot enum. Tā kā enum var viegli izmantot slēdžā. enum var šķērsot. enum var ir lauki, konstruktori un metodes. Tādējādi, tas palielina kompilēšanas laika pārbaudi un novērš kļūdas nederīgu konstanšu pārsūtīšanas dēļ, jo jūs jau esat dokumentējis, kuras vērtības ir likumīgi izmantojamas.

Atšķirības starp Enum un klasi

Lai gan klasei un sarakstam Java vidē ir līdzīga funkcionalitāte, tie atšķiras pēc dažiem aspektiem. Apspriedīsim atšķirības



Enum Klase
Enuma konstantes nevar ignorētKlases konstantes var ignorēt
Enum neatbalsta objektu izveidošanuKlase atbalsta objektu izveidošanu
Enum nevar paplašināt citas klasesKlase var pagarināt citas klases
uzskaite cagregāta saskarneKlase var ieviest saskarni


Prāta praktiskie piemēri

Tagad, lai saprastu enum daudz labāk, izpildīsim dažus praktiskus piemērus, pamatojoties uz sekojošo.

Skaitīšanas definēšana Java

Enumu var pasludināt vai nu klases iekšpusē, vai ārpus cļaut. Bet to nevar deklarēt nevienā metodē. Ņemsim nelielu piemēru, lai saprastu tā sintaksi, definīciju un deklarāciju.

Sintakse:

enum nosaukums {konstanti}

Šajā piemērā mēs esam deklarējuši galvenais () metodi iekšā enum

paketes definīcija publiskā klase Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouputs

KTM

Šajā piemērā galvenais () metode ir deklarēta ārā of enum.

paketes definīcija enum Krāsa {BAJAJ, KTM, YAMAHA} publiskā klase Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// Izeja:

YAMAHA

Enum izmanto Switch Case

Uzskaiti var izmantot arī slēdža paziņojumā. Ir svarīgi, lai visos gadījumu paziņojumos būtu jāizmanto konstantes no tā paša uzskaites, kuru izmanto slēdzis. Pārbaudīsim, pamatojoties uz to.

Šeit mēs pasludināsim enumu ar nedēļas dienām kā tā elementus un nodosim datus virknes veidā, lai izdrukātu atbilstības gadījuma datus.

ir pēcdiploma students un apgūst to pašu
pakešu ieslēgta uzskaite Diena {SVĒTDIENA, PIRMDIENA, OTRDIENA, TREŠDIENA, CETURTDIENA, PIEKTDIENA, SESTDIENA} publiskā klase Edureka {Dienas diena publiskā Edureka (Dienas diena) {this.day = diena} public void dayIsLike () {switch (diena) {gadījums PIRMDIENA: System.out.println ('Sveiki, šodien ir pirmdiena') pārtraukuma gadījums OTRDIENA: System.out.println (“Sveiki, šodien ir otrdiena”) pārtraukuma gadījums TREŠDIENA: System.out.println ('Sveiki, šodien ir trešdiena ') pārtraukuma gadījums CETURTDIEN: System.out.println (' Sveiki, šodien ir ceturtdiena ') pārtraukuma gadījums PIEKTDIEN: System.out.println (' Labdien, šodien ir piektdiena. ') pārtraukuma gadījums SESTDIEN: System.out.println (' Sveiki, šodien ir jūsu nedēļas nogale ') pārtraukuma gadījums SVĒTDIENA: System.out.println (' Sveiki, šodien ir brīvdiena ') pārtraukuma noklusējums: System.out.println (' Lūdzu, ievadiet derīgu dienu. ') Pārtraukums}} public static void main (String [] args) {String str = 'PIRMDIENA' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Izeja:

Sveiki, šodien irPirmdiena

Mantošana, izmantojot enum

Būtībā jebkura enum tiek attēlota kā klase, kas paplašina abstrakto klasi java.lang. Enum un tai ir vairāki statiski locekļi. Tāpēc an enum nevar pagarināt nevienu citu klasi vai enum nav vairāku mantojumi . Izpildīsim piemēru, lai to labāk izprastu.

Šeit mēs mantosim OS, pamatojoties uz tālruņa veidotāju.

pakotnes mantojums importēt java.util.ArrayList importēt java.util.List public class Edureka {public static void main (String [] args) {List paveldēt = new ArrayList () paveldēt.add (LibraryEnum.FIRST) mantot.add (ClientEnum. google) (HTTPMethodConvertible element: mantot) {System.out.println (element.getHTTPMethodType ())}} statiskā saskarne HTTPMethodConvertible {public String getHTTPMethodType ()} statiskā uzskaite LibraryEnum īsteno HTTPMethodConvertible, {FIRST 'Huawei'), THIRD ('Apple 11 Pro') virkne httpMethodType LibraryEnum (virknes tālrunis) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} statiskā enum ClientEnum ievieš HTTPMethodConvertible {huawei ('Hong ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

// Izeja:

Google Pixel
Android One

Enum ar pielāgotām vērtībām

Enums pēc noklusējuma ir savas virknes vērtības, mēs varam arī piešķirt dažas pielāgotas vērtības enums. Apsvērsim šo piemēru.

enum Satiksme {RED (“STOP”), ORANGE (“WAIT”), GREEN (“GO”)}

Iepriekš minētajā piemērā mēs varam redzēt, ka Traffic enum ir trīs dalībnieki. Proti,

Sarkans, oranžs un ZAĻA ar savām atšķirīgajām pielāgotajām vērtībām Apturēt, gaidīt un IET attiecīgi.

Lai izmantotu tā paša veida uzskaiti kodā, mums jāievēro daži punkti:

  • Mums ir jārada parametrizēts konstruktors šai enu klasei. Tāpēc, ka mēs to zinām enum klases objektu nevar skaidri izveidot, tāpēc inicializēšanai mēs izmantojam parametrizētu konstruktoru.
  • The celtnieks tā nevar būt sabiedrība vai aizsargāta Privāts vai noklusējums modifikatori. Ja mēs izveidosim publisku vai aizsargātu, tas ļaus inicializēt vairākus objektus, kas ir pilnībā pret enum funkcionalitāte.
  • Mums ir jāizveido labāka metode, lai iegūtu vērtību enums.

Izpildīsim programmu, pamatojoties uz to.

paketes trafika uzskaite TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action 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 () + 'action:' + signal.getAction ())}}}

// Izeja:

nosaukums: RED darbība: STOP
nosaukums: ZAĻĀ darbība: IET
vīrietise: ORANGE darbība: WAIT

Apsveriet paziņojumus, ja citādi

Tagad izpildīsim programmu, kuras pamatā ir uzskaitīt if-else-if paziņojumos. Šeit mēs atradīsim šķērsojuma virzienu, nododot enum pieejamo virzienu vērtības.

pakete Norādījumi enum Virzieni {AUSTRUMI, RIETUMI, ZIEMEĻI, DIENVIDI} sabiedriskā klase Edureka {publiskā statiskā tukšums main (String args []) {Norādes dir = Norādījumi.NORTH if (dir == Norādījumi.EAST) {System.out.println ( 'Direction: East')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} cits if (dir == Directions.NORTH) {System.out.println ('Direction : Ziemeļi ')} cits {System.out.println (' Virziens: Dienvidi ')}}}

// Izeja:

Sakinosaukums: ziemeļi

Dažādas metodes, ko lieto kopā ar enum

Vērtības (): Kad izveidojat uzskaiti, Java kompilators iekšēji pievieno vērtības () metodi. Šī metode atgriež vērtību masīvs kas satur visas enum vērtības.

// Sintakse:

publiskās statiskās enum tipa [] vērtības ()

Mēs uzzināsim masīva konkrēta elementa indeksa vērtību.

pakotnes vērtības enum Krāsa {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'indeksā' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Izeja:

RED indeksā 0
ZAĻA pie 1. rādītāja
ZILA indeksā 2
TĪKLS

ValueOf (): Šismetodi izmanto, lai atgrieztu uzskaites konstanti, kuras vērtība ir vienāda ar nodots kā arguments, izsaucot šo metodi.

// Sintakse:

public static enum type valueOf (String str)

Šeit mēs atradīsim konkrēta tālruņa izmaksas, pamatojoties uz ievadi, kuru mēs nododam virknei.

pakotnes vērtības enum Mobile {Samsung (1099), Apple (1250), Google (1325) int cena Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') vietnei (Mobile m: Mobile.values ​​()) {System.out.println (m + 'izmaksas' + m.showPrice () + 'dolāri' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Atlasīts:' + ret)}}

// Izeja:

Samsung maksā 1099 dolārus
Apple maksā 1250 dolāru
Google maksā 1325 dolārus
Atlasīts: Samsung

Secība (): Java tulks pievieno kārtas numurs () metode iekšēji, kad tā izveido enum. Ordinal () metode atgriež indekss no uzskaites vērtības.

// Sintakse:

publiskā gala kārtas kārtas numurs ()

Šeit mēs uzzināsim masīva konkrēta elementa indeksa vērtību. un arī ķiršu augļu stāvoklis.

Iepakojuma kārtas numurs Enrits {Apple, Banana, Cherry, Date, Elderberry} enum Dārzeņi {Burkāni, bietes, pupas, tomāti, sīpoli} public class Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. vērtības () vērtībai (Augļi fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Augļi f1, f2, f3 f1 = Augļi. Ābolu f2 = Augļi. Ķiršu f3 = Augļu. Ābolu ja (f2.compareTo (f1)> 0) {System.out.println (f2 + 'nāk aiz' + f1)} Dārzeņi v1 = Dārzeņi.Betroot if (f1.vienāds (v1)) {System.out.println (' Nepareizi ')}}}

// Izeja:

Ābols: 0
Banāns: 1
Ķirsis: 2
Datums: 3
Plūškoks: 4
Ķirsis nāk pēc Apple

Enum priekšrocības

  • Uzlabojas Java Enum tipa drošība
  • Enum ir veidots tā, lai tas būtu ērti lietojams pārslēgšanas gadījumi
  • Enum var būt šķērsoja
  • Enum var būt lauki, metodes, un konstruktori
  • Enum var īstenot saskarnes
  • Enum nevar pagarināt a klasē jo iekšēji tas paplašinās Enum klasē

Enum Usecase: akmens, papīra, šķēru spēle

Mēs izmantosim enum Java, lai izveidotu mūsu bērnības spēli, akmens (akmens) papīrs un šķēres . Šis kods izskaidro, kā.

pakete Edureka importēt java.util.Random importēt 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 Skeneris iekš = jauns Skeneris (System.in) System.out.println ('nLet us start ... n'), kamēr (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') Būla validInput do {System.out.print ('nJūsu pagrieziens (lūdzu, ievadiet s šķērei, p papīram, t akmenim, q beigt): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} cits, ja (inChar == 'p') {playerMove = HandSign.PAPER} cits, ja (inChar == 't') {playerMove = HandSign.STONE} cits {System.out.println ( 'nLūdzu, pārbaudiet ievadi un mēģiniet vēlreiz! n') validInput = false}}, kamēr (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt ir mana kārta: SCISSORn')} cits, ja (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('n Ir mana kārta: PAPĪRS')} else {computerMove = HandSign.STONE System.out.println ('nMan ir mana kārta: STONEn')} ja (computerMove = = playerMove) {System.out.println ('nTas ir neizšķirts! n') ++ numTie} cits, ja (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor sagriež papīru , Es uzvarēju! N ') ++ numComputerWon} cits, ja (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper ietin akmeni, es uzvarēju! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone pārtrauc šķēru, es uzvarēju! n') ++ numComputerWon} else {System.out.println ('nCongratulations. ..! Jūs uzvarējāt! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nPatēriņu skaits: '+ numTrials) System.out.printf (' Es uzvarēju% d (%. 2f %%) . Jūs uzvarējāt% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Uz redzēšanos! Ceru, ka jums patika ..! ' )}}

// Izeja:

Sāksim ...
Šķērveida-papīra-akmens
Jūsu kārta (lūdzu, ievadiet s, lai šķēres, p - papīrs, t - akmens, q, lai beigtu):
s
Pienāk mana kārta: AKMENS
Akmens salauž šķēres, es uzvarēju!
Šķērveida-papīra-akmens
Jūsu kārta (lūdzu, ievadiet s, lai šķēres, p - papīrs, t - akmens, q, lai beigtu):
kas
Izmēģinājumu skaits: 1Es uzvarēju 1 (100,00%). Jūs uzvarējāt 0 (0,00%).
Uz redzēšanos! Ceru, ka jums patika ..!

Līdz ar to mēs esam pabeiguši šo Java Enum apmācību. Es ceru, ka jūs esat sapratis Java Enum un tā ieviešanu, izmantojot dažus reāllaika piemērus.

Tagad, kad esat sapratis enum izmantojot šo “Java Enum apmācību”, pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kursi ir paredzēti studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums iespēju sākt Java programmēšanu un apmācīt gan pamata, gan uzlabotas Java koncepcijas, kā arī dažādas Java struktūras, piemēram, hibernēt un Pavasaris .

Vai mums ir jautājums? Pieminiet to šī emuāra “Java Enum Tutorial” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.