java enum java enumeration tutorial with examples
Този урок ще разгледа подробно класа и конструктора на Java Enum. Ще научим как да използваме Enum чрез различни примери за програмиране на Java:
Това е специален клас, чието обяснение ще бъде предоставено подробно. Ще бъде даден поглед върху класа Java Enum заедно със списъка с методи, които той поддържа.
Достатъчно програми, които прилагат концепциите на Java enum и някои често задавани въпроси, които могат да бъдат зададени по време на интервютата, са включени в този урок за вашето лесно разбиране.
=> Проверете тук, за да видите серията за обучение за Java за всички.
Какво ще научите:
Изброяване на Java
Изброяването на Java не е нищо друго освен списък с променливи, методи или конструктори. Това са група константи. Концепцията за изброяване е въведена в JDK5. Свойството по подразбиране за всяка константа на изброяване е публично, статично и окончателно.
ключова дума enum
Изброяването се създава с помощта на ключова дума, наречена „ преброяване ”.
По-долу е даден синтаксисът, с който можем да създадем изброяване.
Синтаксис:
enum enumerated_type_name
{
enumerator1, enumerator2, ... enumeratorN;
}
Забележка: enum може да бъде дефиниран само в клас или интерфейс от най-високо ниво или в статичен контекст. Не трябва да е вътре в метод.
Пример за изброяване
В този пример ще инициализираме четири изброителя, т.е. лопата, сърце, диамант и клуб, принадлежащи към изброен тип, наречен карти.
След това ще се опитаме да отпечатаме всеки от тези изброители.
/* * 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); } }
Изход:
Клас Enum
Едно нещо, което трябва да сте забелязали в горния пример (вижте коментарите), е, че не сме използвали „Нова ключова дума“ докато инстанцира. Въпреки че изброяванията дефинират клас Enum и конструкторите също, те не използват нова ключова дума.
Можем да използваме изброителите, дефинирани по същия начин като примитива. Enum е общ клас и всички изброявания наследяват Enum.
Синтаксис:
// E е типът на изброяване.
клас Enum
Как да използвам Enum в Java
Нека видим как да използваме Enum в различни сценарии с помощта на примери за Java:
В клас A
Enum може да бъде деклариран вътре или извън (пример за ключова дума enum) клас, но не и вътре в метод. Тук ще покажем как enum се декларира в клас.
В примера по-долу , ние сме създали изброяване в клас и след това сме извлекли стойността или преброителя с помощта на референтна променлива 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); } }
Изход:
Итериране на Enum чрез цикли
Тук ще обсъдим как можем да преминем през преброяване. Декларирали сме изброяване с четири изброители (извън клас). След това инициализираме a за всеки цикъл (вътре в клас) и се опитахме да извлечем стойността на изброителите.
/* * 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); } } }
Изход:
как да тествате частни методи, използвайки
В ако-друго
В програмата по-долу създадохме изброяване с три различни изброители и след това съхранихме преброителя в референтната променлива за един от посочените изброители.
След това стартирахме проверката на условието if, където сме внедрили две условия, посочени с ИЛИ, така че ако едно от тези условия е изпълнено, то ще отпечата изявлението, посочено в условието if.
В противен случай ще отпечата изявлението, посочено в условието 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'); } } }
Изход:
В Изявление за превключване
В програмата по-долу създадохме изброяване с четири изброителя. След това съхранихме един от изброителите в референтната променлива. След това инициализирахме оператор Switch и проверихме всеки от тези изброители.
При появата на този конкретен изброител той ще отпечата изявлението, посочено в конкретния случай.
/* * 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; } } }
Изход:
Enum поле и методи
Enum поле
Този раздел ще обясни подробно полето за изброяване. Можем да добавяме полета към преброяването на Java и всеки изброител получава тези полета. Стойността на полето трябва да бъде присвоена на конструктора на изброяването.
В синтаксиса по-долу можем да видим, че изброяването е дефинирано с три изброителя. До всеки изброител сме дефинирали поле от тип int. ( E.g. - (3), (2) и (1) съответно).
Това означава, че Java enum има конструктор, който взема int. Този конструктор задава полето int. Когато е дефиниран изброител, тогава тази стойност int (посочена за този изброител) се предава на конструктора.
Синтаксис:
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; } }
Забележка: Например в полето Enum, моля, вижте раздела „ Конструктор на Enum ”.
Методи на Enum
# 1) име ()
public final String name () - Връща името на извикващата константа (непроменено или непроменено).
# 2) е равно ()
public final boolean equals (Object other) - Връща true, ако obj и извикващият обект се отнасят до една и съща константа.
# 3) toString
public String toString () - Връща името на извикващата константа. Не е задължително да съвпада с името, използвано в декларацията на изброяването.
# 4) клон
защитен краен обект клонинг ()
хвърля CloneNotSupportedException - Това означава, че изброяването ще хвърли изключение при опит за клониране.
# 5) hashCode ()
public final int hashCode () - Връща хеш кода за извикващия обект.
# 6) финализиране ()
protected final void finalize () - enum class не може да има финализирани методи. Няма възвръщаема стойност.
# 7) compareTo ()
public final int compareTo (E obj) - Това сравнява изброяването с посочения обект obj. Той връща отрицателно, ако обектът е по-малък от посочения обект. Той връща положително, ако този обект е по-голям от посочения обект obj и връща нула, ако посоченият obj е равен на този обект.
# 8) getDeclaringClass
public final Class getDeclaringClass () - Връща типа на изброяване (известен също като клас на деклариране на enum), на който е извикващата константа.
# 9) ordinal (), values () и valueOf ()
Всички тези методи са част от пакета java.lang.Enum . Методът ordinal () връща реда на константата на изброяване въз основа на индекса на константата.
Методът values () връща всички стойности, присъстващи в изброяването. Методът valueOf (String) връща константата на изброяване на входния String. Ако посоченият низ не е съчетан с константата, той ще хвърли IllegalArgumentException.
По-долу е даден пример за програмиране, където сме използвали същия пример (като пример с ключова дума enum) и сме реализирали концепцията на всичките три метода.
/* * 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')); } }
Изход:
Конструктор на Enum
Enum (тъй като е и клас) поддържа конструктор за предаване на данни по време на създаването на изброители или известен също като константи на enum.
Основното свойство на enum конструктора е, че те са частни или частни пакети. Това означава, че те са достъпни в рамките на клас или в пакет.
Нека да видим долния пример. Тук сме използвали както метода, така и конструктора. На първо място, ние създадохме изброяване, наречено „играчи“, което има пет изброители и полето.
След това имаме конструктор и метод, който ще върне броя на изпълненията, отбелязани от всеки играч, преброител или константа на константа.
След това имаме основния клас, в който сме използвали за всеки цикъл с метода values (), за да съхраняваме и итерираме всеки изброител. Също така, ние извикахме метода за броя на изпълненията, отбелязани от всеки играч.
/* * 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'); } }
Изход:
често задавани въпроси
В # 1) Каква е разликата между Iterator и Enumeration в Java?
Отговор: По-долу е дадена разликата между Iterator и Enumeration.
Итератор | Изброяване |
---|---|
Това е общ курсор, който се използва за итерация на елементи и е приложим за целия клас на колекция. | Това не е родов курсор, защото е приложим само за наследени класове като Enum. Разрешение за четене само за клас на колекция. |
Някои от методите са hasNext (), next () за итерация. | Някои от методите са hasMoreElements (), nextElement () за итерация. |
Можем да премахнем елемента в колекция с помощта на итератор. | Не можем да премахнем елемента в колекция с помощта на Enumeration, тъй като той има само разрешение за четене. |
В # 2) Как Enum поддържа наследяване?
Отговор: Afterall Enum също е клас в Java, така че трябва да поддържа наследяване, което е основен принцип на OOPS. Всички изброявания разширяват клас java.lang.Enum. Тъй като клас може да разшири само един родител, Enum клас не разширява нито един друг.
ToString (), който е част от класа Enum (обяснен в раздел Enum Method), е заменен в класа java.lang.Enum.
Заключение
В този урок ние обсъдихме изброяванията, преброителите, класа Java Enum и ключовата дума enum с подходящи примери и обяснения, където е необходимо. Също така, ние дадохме представа за важните методи, свързани с класа Enum с полето enum.
Осигурена е представа за конструктора, преброяване с if-else, switch и контури.
=> Посетете тук, за да научите Java от нулата.
Препоръчително четене
- Урок за клас Java Scanner с примери
- Java Integer и Java BigInteger клас с примери
- Урок за Java Float с примери за програмиране
- Какво е Java Vector | Урок за Java Vector Class с примери
- TreeMap в Java - Урок с примери за TreeMap на Java
- Java Double - Урок с примери за програмиране
- Java Array Class Tutorial - java.util.Arrays Class с примери
- Концепции на C #: конструктор, деструктор, статичен клас, структура и преброяване