The Изброяване в е начин за определяне на клас с фиксирани и именувани константи със съответните им използвайки ключовата дума преброяване. В това ' Урок за Java Enum ”, Ще се научим дадефинирайте изброяване заедно спримери за по-добро разбиране.
- Какво е изброяване?
- Защо се нуждаем от изброяване?
- Разлики между Enum и Class
- Практически примери за Enum
- Предимства на Enum
- Enus Usecase: Rock, Игра хартия, ножици
Какво е изброяване?
Java Enums са класове, които имат фиксиран набор от константи или променливи, които не са склонни да се променят. Изброяването в Java се постига с помощта на ключовата дума преброяване. Java преброяване константите са статични и финал имплицитно. Функцията Enum е достъпна от JDK версия 1.5.
Защо се нуждаем от изброяване?
преброяване подобрява безопасността на типа при проверка по време на компилация, за да се избегнат грешки по време на изпълнение, като се избягва кодът на шаблона. Например, ако трябва да изберете една възможност от най-малкото налични опции, да речем,
Работа Тип: (Договор / Временно / Постоянен)
Тогава най-добрият вариант би бил използването на преброяване. Защото преброяване може лесно да се използва в превключвателя. преброяване може да се премине. преброяване мога имат полета, конструктори и методи. Следователно, увеличава проверката по време на компилация и избягва грешки поради предаване на невалидни константи, тъй като вече сте документирали кои стойности са законни за използване.
Разлики между Enum и Class
Въпреки че клас и enum имат сходна функционалност в Java среда, те се различават в няколко аспекта. Нека обсъдим разликите
Enum | Клас |
Константите на Enum не могат да бъдат заменени | Константите на класа могат да бъдат заменени |
Enum не поддържа създаването на обекти | Класът поддържа създаването на обекти |
Enum не може да разширява други класове | Един клас може да разшири други класове |
изброяване cинтерфейс за изпълнение | Един клас може да реализира интерфейс |
Практически примери за Enum
Сега, за да разберем enum по много по-добър начин, нека изпълним някои практически примери въз основа на следното.
- Дефиниране на изброяване в Java
- Enum, използван в Case Case
- Наследяване с използване на enum
- Преброяване с персонализирани стойности
- Изброяване в изрази if-else-if
- Различни методи, използвани с enum
Дефиниране на изброяване в Java
Enum може да бъде деклариран или в клас, или извън cпозволявам. Но той не може да бъде деклариран в нито един метод. Да вземем малък пример, за да разберем синтаксиса, дефиницията и декларацията.
конвертиране в двоично в python
Синтаксис:
име на преброяване {константи}
В този пример ние декларирахме главен () метод вътре преброяване
дефиниция на пакет публичен клас Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}
// Извод
KTM
В този пример, главен () деклариран метод отвън на изброяване.
дефиниция на пакета enum Цвят {BAJAJ, KTM, YAMAHA} публичен клас Edureka {публична статична невалидна основна (String [] аргументи) {Bike b1 = Color.YAMAHA System.out.println (b1)}}
// Изход:
ЯМАХА
Enum, използван в Case Case
Изброяването може да се използва и в оператор за превключване. Важно е, че всички оператори за случай трябва да използват константи от същия преброяване, както се използва от оператора за превключване. Нека проверим пример въз основа на това.
Тук ще декларираме enum с дни от седмицата като негови елементи и ще предадем данните под формата на низ, за да отпечатаме данните на съответстващия случай.
пакет сменен enum Ден {НЕДЕЛЯ, ПОНЕДЕЛНИК, ВТОРНИК, СРЯДА, ЧЕТВЪРТЪК, ПЕТЪК, СЪБОТА} публичен клас Edureka {Ден ден публичен Edureka (Ден ден) {this.day = day} public void dayIsLike () {switch (day) {case ПОНЕДЕЛНИК: System.out.println („Здравейте, днес е понеделник“) дело за прекъсване ВТОРНИК: System.out.println („Здравейте, днес е вторник“) дело за прекъсване СРЯДА: System.out.println („Здравейте, днес е сряда ') break case ЧЕТВЪРТЪК: System.out.println (' Здравейте, днес е четвъртък ') break case ПЕТЪК: System.out.println (' Здравейте, днес е петък. ') break case СЪБОТА: System.out.println (' Здравейте, днес е вашият уикенд ') случай на почивка НЕДЕЛЯ: System.out.println (' Здравейте, днес е празник ') почивка по подразбиране: System.out.println (' Моля, въведете валиден ден. ') Почивка}} обществена статична void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}
// Изход:
Здравейте, днес еПонеделник
Наследяване с използване на enum
По принцип, всякакви преброяване е представен като клас, който разширява абстрактния клас java.lang. Enum и има няколко статични члена. Следователно, an преброяване не може да разшири никой друг клас или преброяване няма кратно наследства . Нека изпълним пример, за да го разберем по-добре.
Тук ще наследим операционната система въз основа на производителя на телефона.
пакет наследяване импортиране java.util.ArrayList импорт java.util.List публичен клас Edureka {публична статична невалидна главна (String [] аргументи) {Списък наследяване = нов ArrayList () наследяване.добавяне (LibraryEnum.FIRST) наследяване.добавяне (ClientEnum. google) за (HTTPMethodConvertible елемент: наследяване) {System.out.println (element.getHTTPMethodType ())}} статичен интерфейс HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum изпълнява HTTPMethodConvertible {FIRST ('Google PiD'), 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum реализира HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}
// Изход:
Google Pixel
Android One
Преброяване с персонализирани стойности
Enums имат свои собствени низови стойности по подразбиране, ние също можем да присвоим някои персонализирани стойности на enums. Нека разгледаме долния пример.
enum Трафик {ЧЕРВЕН („СТОП“), ОРАНЖЕВ („ПОЧАКАЙТЕ“), ЗЕЛЕН („ОТИДЕТЕ“)}
В горния пример можем да видим, че Traffic enum има три члена. А именно,
ЧЕРВЕНО, ОРАНЖЕВО и ЗЕЛЕНО с имат свои собствени различни потребителски стойности СПРЕТЕ, ПОЧАКАЙТЕ и ОТИВАМ съответно.
Сега, за да използваме същия тип enum в кода, се очаква да следваме някои точки, които са:
- Трябва да творим параметризиран конструктор за този enum клас. Защото ние знаем това преброяване обектът на класа не може да бъде създаден изрично, така че за инициализиране използваме параметризиран конструктор.
- The строител не може да бъде публично или защитено, което трябва да има частни или по подразбиране модификатори. Ако създадем публични или защитени, това ще позволи инициализиране на повече от един обект, който е напълно против функционалност на изброяване.
- Трябва да създадем метод за получаване, за да получим стойността на изброявания.
Нека изпълним програма, базирана на това.
пакет трафик enum TrafficSignal {ЧЕРВЕНО ('STOP'), ЗЕЛЕНО ('GO'), ORANGE ('WAIT') частен String действие public String getAction () {return this.action} private TrafficSignal (String действие) {this.action = действие}} публичен клас Edureka {публична статична празнота main (String args []) {TrafficSignal [] сигнали = TrafficSignal.values () за (TrafficSignal signal: сигнали) {System.out.println ('name:' + signal.name () + 'действие:' + signal.getAction ())}}}
// Изход:
име: ЧЕРВЕНО действие: СТОП
name: ЗЕЛЕНО действие: GO
мъжкид: ОРАНЖЕВО действие: ПОЧАКАЙТЕ
Изброяване в изрази if-else-if
Сега нека изпълним програма, базирана на enum в if-else-if изрази. Тук ще намерим посоката на обръщане, като предадем стойностите на указанията, налични в преброяването.
package Directions enum Указания {EAST, WEST, NORTH, SOUTH} публичен клас 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 : Север ')} else {System.out.println (' Посока: Юг ')}}}
// Изход:
Казвамцион: Север
Различни методи, използвани с enum
Стойности(): Когато създавате изброяване, Java компилатор вътрешно добавя стойности() метод. Този метод връща масив съдържащ всички стойности на изброяването.
//Синтаксис:
публични статични стойности от тип [] [] ()
Ще открием стойността на индекса на даден елемент в масив.
стойности на пакета enum Цвят {ЧЕРВЕНО, ЗЕЛЕНО, СИНЕ} публичен клас Edureka {публична статична невалидна основна (String [] аргументи) {Color arr [] = Color.values () за (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}
// Изход:
пример за променлива на екземпляр в java
ЧЕРВЕНО при индекс 0
ЗЕЛЕНО при индекс 1
СИНЕ при индекс 2
НЕТ
Стойност на(): Товаметод се използва за връщане на константата на изброяване, чиято стойност е равна на предадени като аргумент при извикване на този метод.
//Синтаксис:
публична статична стойност от тип преброяване (String str)
Тук ще намерим цената на определен телефон въз основа на входа, който предаваме на низа.
пакетни стойности на enum Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} публичен клас Edureka {public static void main (String args []) {System.out.println ('Списък на мобилен телефон:') за (Mobile m: Mobile.values ()) {System.out.println (m + 'разходи' + m.showPrice () + 'долари' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Избрано:' + ret)}}
// Изход:
Samsung струва 1099 долара
Apple струва 1250 долара
Google струва 1325 долара
Избрано: Samsung
Пореден (): Интерпретаторът на Java добавя пореден () метод вътрешно, когато създава преброяване. Методът ordinal () връща индекс от изчислената стойност.
//Синтаксис:
публичен окончателен вътрешен ред ()
Тук ще разберем стойността на индекса на даден елемент в масив. а също и позицията на черешовия плод.
Пакет ред с плодове {Apple, Banana, Cherry, Date, Elderberry} enum Зеленчуци {Морков, Цвекло, Фасул, Домат, Лук} публичен клас Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. стойности () за (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Fruits f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'идва след' + f1)} Vegetables v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' Неправилно ')}}}
// Изход:
Apple: 0
Банан: 1
Череша: 2
Дата: 3
Бъз: 4
Cherry идва след Apple
Предимства на Enum
- Enum в Java се подобрява тип безопасност
- Enum е проектиран да бъде лесно използваем в превключващи кутии
- Enum може да бъде пресечен
- Enum може да има полета, методи, и конструктори
- Enum може да внедри интерфейси
- Enum не може да разшири a клас защото вътрешно се разширява Enum клас
Enus Usecase: Rock, Paper, Scissors Game
Ние ще използваме преброяване в Java, за да създадем нашата игра от детството, скалната (каменна) хартия и ножици . Следният код обяснява как.
пакет Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} публичен клас 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 ('nНай да започнем ... n') докато (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nВашият ход (Моля, въведете s за ножица, p за хартия, t за камък, q за излизане): 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 ( 'nМоля, проверете въведеното и опитайте отново! n') validInput = false}} докато (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nTh's My turn: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nThis is My turn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt My My: 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 ('nScissor реже хартия , Спечелих! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper обвива камък, спечелих! N ') ++ numComputerWon} иначе ако (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone разбива ножица, аз спечелих! n') ++ numComputerWon} else {System.out.println ('nПоздравления. ..! Спечелихте! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nБроят на опитите: '+ numTrials) System.out.printf (' Спечелих% d (%. 2f %%) . Спечелихте% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Чао! Надявам се, че сте се насладили ..! ' )}}
// Изход:
Нека започнем ...
Ножица-хартия-камък
Вашият ред (моля, въведете s за ножица, p за хартия, t за камък, q за отказ):
с
Дойде моят ред: КАМЪК
Ножица за разбиване на камъни, победих!
Ножица-хартия-камък
Вашият ред (моля, въведете s за ножица, p за хартия, t за камък, q за отказ):
Какво
Броят на опитите: 1И спечелих 1 (100,00%). Спечелихте 0 (0,00%).
Чао! Надявам се, че ви е харесало ..!
С това стигнахме до края на този урок за Java Enum. Надявам се, че сте разбрали Enum в Java и неговото прилагане чрез някои примери в реално време.
Сега, когато разбрахте преброяване основите чрез този 'Java Enum Tutorial' разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсовете за обучение и сертифициране на Java J2EE и SOA на Edureka са предназначени за студенти и професионалисти, които искат да бъдат разработчик на Java. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Пролет .
Имате въпрос към нас? Споменете го в раздела за коментари в този блог „Урок за Java Enum“ и ние ще се свържем с вас възможно най-скоро.