The Enum в Java е тип данни, който съдържа фиксиран набор от константи.
Може да се използва за дни от седмицата (НЕДЕЛЯ, ПОНЕДЕЛНИК, ВТОРНИК, СРЯДА, ЧЕТВЪРТЪК, ПЕТЪК и СЪБОТА), посоки (СЕВЕР, ЮГ, ИЗТОК и ЗАПАД), сезон (ПРОЛЕТ, ЛЯТО, ЗИМА и ЕСЕН или ЕСЕН ), цветове (ЧЕРВЕНО, ЖЪЛТО, СИНЬО, ЗЕЛЕНО, БЯЛО и ЧЕРНО) и т.н. Според конвенциите за именуване на Java трябва да имаме всички константи с главни букви. И така, имаме enum константи с главни букви.
Java Enum могат да се разглеждат като класове, които имат фиксиран набор от константи (променлива, която не се променя). Java enum константите са статични и окончателни имплицитно. Предлага се от JDK 1.5.
хомогенна смес
Енумите се използват за създаване на наш собствен тип данни като класове. The изброяване тип данни (известен също като изброен тип данни) се използва за дефиниране на enum в Java. За разлика от C/C++, enum в Java е повече мощен . Тук можем да дефинираме enum или вътре в класа, или извън него.
Java Enum вътрешно наследява Клас Enum , така че не може да наследи друг клас, но може да реализира много интерфейси. Можем да имаме полета, конструктори, методи и основни методи в Java enum.
Точки, които трябва да запомните за Java Enum
- Enum подобрява безопасността на типа
- Enum може лесно да се използва в switch
- Enum може да бъде обходен
- Enum може да има полета, конструктори и методи
- Enum може да реализира много интерфейси, но не може да разшири нито един клас, защото вътрешно разширява класа Enum
Прост пример за Java Enum
class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }}Тествайте сега
Изход:
WINTER SPRING SUMMER FALL
Нека видим друг пример за Java enum, където използваме методите value(), valueOf() и ordinal() на Java enum.
class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }}
Изход:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
Забележка: Компилаторът на Java вътрешно добавя методи values(), valueOf() и ordinal() в enum по време на компилация. Той вътрешно създава статичен и краен клас за enum.
Каква е целта на метода values() в enum?
Компилаторът на Java вътрешно добавя метода values(), когато създава enum. Методът values() връща масив, съдържащ всички стойности на enum.
Каква е целта на метода valueOf() в enum?
Компилаторът на Java вътрешно добавя метода valueOf(), когато създава enum. Методът valueOf() връща стойността на дадена константа enum.
Каква е целта на метода ordinal() в enum?
Компилаторът на Java вътрешно добавя метода ordinal(), когато създава enum. Методът ordinal() връща индекса на стойността enum.
Дефиниране на Java Enum
Enum може да бъде дефиниран в или извън класа, защото е подобен на клас. Точката и запетая (;) в края на константите enum не са задължителни. Например:
enum Season { WINTER, SPRING, SUMMER, FALL }
Или,
enum Season { WINTER, SPRING, SUMMER, FALL; }
И двете дефиниции на Java enum са еднакви.
Пример за Java Enum: Дефиниран извън клас
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}Тествайте сега
Изход:
как да конвертирате int в низ
WINTER
Пример за Java Enum: Дефиниран вътре в клас
class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }}Тествайте сега
Изход:
линукс архитектура
WINTER
Пример за Java Enum: основен метод в Enum
Ако поставите метода main() вътре в enum, можете да стартирате enum директно.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
Изход:
WINTER
Инициализиране на конкретни стойности на константите enum
Константите enum имат начална стойност, която започва от 0, 1, 2, 3 и т.н. Но можем да инициализираме специфичната стойност към константите enum, като дефинираме полета и конструктори. Както беше посочено по-рано, Enum може да има полета, конструктори и методи.
Пример за указване на начална стойност на константите enum
class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }}Тествайте сега
Изход:
WINTER 5 SPRING 10 SUMMER 15 FALL 20
Конструкторът на тип enum е частен. Ако не декларирате частен компилатор вътрешно създава частен конструктор.
enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
Вътрешен код, генериран от компилатора за горния пример за тип enum
final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } }
Можем ли да създадем екземпляра на Enum чрез нова ключова дума?
Не, защото съдържа само частни конструктори. |
Можем ли да имаме абстрактен метод в Enum?
Да разбира се! можем да имаме абстрактни методи и можем да осигурим изпълнението на тези методи.
Java Enum в команда за превключване
Можем да приложим enum към команда за превключване, както в дадения пример:
Пример за прилагане на Enum върху оператор switch
class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }}Тествайте сега
Изход:
monday