Тхе Енум у Јави је тип података који садржи фиксни скуп константи.
Може се користити за дане у недељи (НЕДЕЉА, ПОНЕДЕЉАК, УТОРАК, СРЕДА, ЧЕТВРТАК, ПЕТАК и СУБОТА), правце (СЕВЕР, ЈУГ, ИСТОК и ЗАПАД), годишње доба (ПРОЛЕЋЕ, ЛЕТО, ЗИМА и ЈЕСЕН или ЈЕСЕН ), боје (ЦРВЕНА, ЖУТА, ПЛАВА, ЗЕЛЕНА, БЕЛА и ЦРНА) итд. Према Јава конвенцијама о именовању, све константе би требало да буду написане великим словима. Дакле, имамо енум константе великим словима.
Јава Енумс се може сматрати класама које имају фиксни скуп константи (променљива која се не мења). Јава енум константе су статичне и коначне имплицитно. Доступан је од ЈДК 1.5.
јава нулл цхецк
Енумови се користе за креирање сопственог типа података попут класа. Тхе енум тип података (такође познат као Енумератед Дата Типе) се користи за дефинисање енума у Јави. За разлику од Ц/Ц++, енум у Јави је више моћан . Овде можемо дефинисати енум или унутар класе или ван класе.
Јава Енум интерно наслеђује Енум класа , тако да не може да наследи ниједну другу класу, али може да имплементира много интерфејса. Можемо имати поља, конструкторе, методе и главне методе у Јава енум.
Тачке које треба запамтити за Јава Енум
- Енум побољшава безбедност типова
- Енум се може лако користити у прекидачу
- Енум се може прећи
- Енум може имати поља, конструкторе и методе
- Енум може имплементирати много интерфејса, али не може проширити ниједну класу јер интерно проширује Енум класу
Једноставан пример Јава енума
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
Хајде да видимо још један пример Јава енума где користимо валуе(), валуеОф() и ординал() методе Јава енума.
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
Напомена: Јава компајлер интерно додаје методе валуес(), валуеОф() и ординал() унутар енума у време компајлирања. Интерно креира статичку и коначну класу за енум.
Која је сврха методе валуес() у енум-у?
Јава компајлер интерно додаје метод валуе() када креира енум. Метода валуес() враћа низ који садржи све вредности енума.
Која је сврха методе валуеОф() у енум-у?
Јава компајлер интерно додаје метод валуеОф() када креира енум. Метод валуеОф() враћа вредност датог набрајања константе.
Која је сврха методе ординал() у енум-у?
Јава компајлер интерно додаје метод ординал() када креира енум. Метода ординал() враћа индекс вредности енума.
Дефинисање Јава Енум
Енум се може дефинисати унутар или ван класе јер је сличан класи. Тачка и зарез (;) на крају набрајања константи су опциони. На пример:
enum Season { WINTER, SPRING, SUMMER, FALL }
Или,
штампа са јава
enum Season { WINTER, SPRING, SUMMER, FALL; }
Обе дефиниције Јава енума су исте.
Јава Енум Пример: Дефинисан ван класе
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}Тестирајте одмах
Излаз:
WINTER
Јава Енум Пример: Дефинисано унутар класе
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
Јава Енум Пример: главни метод унутар Енума
Ако ставите маин() метод унутар енума, можете директно покренути енум.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
Излаз:
WINTER
Иницијализација специфичних вредности на енум константе
Енум константе имају почетну вредност која почиње од 0, 1, 2, 3, итд. Али, можемо иницијализовати конкретну вредност на енум константе дефинисањем поља и конструктора. Као што је раније наведено, Енум може имати поља, конструкторе и методе.
Пример задавања почетне вредности константама енума
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 Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
Интерни код који генерише компајлер за горњи пример типа енум
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 }); } }
Можемо ли да креирамо инстанцу Енум помоћу нове кључне речи?
Не, јер садржи само приватне конструкторе. |
Можемо ли имати апстрактни метод у Енум-у?
Да наравно! можемо имати апстрактне методе и можемо обезбедити имплементацију ових метода.
Јава Енум у наредби свитцх
Можемо применити енум на наредбу свитцх као у датом примеру:
Пример примене енума на наредбу свитцх
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