Recent Posts

Thursday, 1 September 2016

Enum Tutorial


Enum(Enumeration)
     An enum is a group of named constants. enum can be used for defining user defined datatypes.
E.g
enum Month {
   JAN,FEB,MAR,.......DEC;
}
     enum concept has introduced in 1.5 version. When compared with old languages enum, the java enum is more powerful because, in java enum we are allowed to take instance members, constructors ..etc which may not be possible in old languages enum.

     Every constant inside enum is implicitly public static and final by default. And we can access enum constants by using enum name.
E.g
package com.ashok.enums;

enum Month {
   JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
   JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}

public class MyEnum {
   public static void main(String[] args) {
      Month mon = Month.JANUARY;
      System.out.println(mon);
   }
}
Output
JANUARY
     Because By Default enum constants are public static final. So in method we can’t declare any static members. If we are declaring the enum outside the class the allowed modifiers are public, <default>, and strictfp. If we are declaring enum with in a class the allowed modifiers are public, private, <default>, strictfp and static.

Enum Vs Inheritance
     Every enum in java should be the direct child class of java.lang.enum. As every enum is already extending java.lang.enum there is no chance of extending any other enum. Hence inheritance concept is not applicable to the enum. This is the reason abstract and final modifiers are not applicable for enum. java.lang.enum is an abstract class and it is direct child class of Object. It implements comparable and serializble interfaces. For java enums the required functionalities defined in this class only.

Enum Vs switch
     We can pass enumtype as an argument to switch statement. From 1.5 versions on words the following is the list of valid argument to the switch.

E.g
package com.ashok.enums;

enum Beer {
   KF, KO, RC, FO;
}

public class MyEnum {
   public static void main(String args[]) {
      Beer b1 = Beer.RC;
      switch (b1) {
      case KF:
         System.out.println("KF is childrens brand");
         break;
      case KO:
         System.out.println("KO is too lite");
         break;
      case RC:
         System.out.println("RC is too hot");
         break;
      case FO:
         System.out.println("Buy one get one");
         break;
      default:
         System.out.println("Other brands are not good");
      }
   }
}
Output
RC is too hot
Note
     If we are passing enum constants as the switch argument all the case labels should be valid enum constants otherwise we will get compiler time error.

values() method
     Every enum implicitly contains values method to list all it’s constants.
E.g
package com.ashok.enums;

enum Months {
   JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
     JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}

public class MyEnum {
   public static void main(String[] args) {
      Months[] mons = Months.values();
      for(Months mon : mons) {
         System.out.println(mon);
      }
   }
}
Output
------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER
ordinal() method
     The position of enum constant is important and it is described with ordinal() method we can find ordinal value of an enum constant by using following method.
E.g
package com.ashok.enums;

enum Months {
   JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
     JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}

public class MyEnum {
   public static void main(String[] args) {
      Months[] mons = Months.values();
      for(Months mon : mons) {
         System.out.println(mon + " --> " +mon.ordinal());
      }
   }
}
Output
------
JANUARY --> 0
FEBRUARY --> 1
MARCH --> 2
APRIL --> 3
MAY --> 4
JUNE --> 5
JULY --> 6
AUGUST --> 7
SEPTEMBER --> 8
OCTOBER --> 9
NOVEMBER --> 10
DECEMBER --> 11
Speciality of java enum
     A java enum can contain constructors, instance members, static members etc. in addition to constants which may not be possible in the old languages enum.
E.g
package com.ashok.enums;

enum Beer {
   KF(100), KO(120), RC(150), FO;
   int price;

   Beer(int price) {
      this.price = price;
      System.out.println("Inside Constructor");
   }

   Beer() {
      this.price = 130;
      System.out.println("Inside No Argument Constructor");
   }

   public int getPrice() {
      return price;
   }
}

public class MyEnum {
   public static void main(String arg[]) {
      Beer[] b = Beer.values();
      for (Beer b1 : b) {
         System.out.println(b1 + " --> " + b1.getPrice());
      }
   }
}
Output
Inside Constructor
Inside Constructor
Inside Constructor
Inside No Argument Constructor
KF --> 100
KO --> 120
RC --> 150
FO --> 130
     An enum can contain constructors also and these will execute at the time of enum class loading. Programmer is not responsible to call constructors explicitly. With in enum we can’t take abstract methods. If the enum contains any thing other than constants(like instance variables, static variables.. etc) then the list of constants should end with semicolon.
E.g
enum Month {
   JAN,FEB,MAR ; // ; Mandatory
   int num;
}

enum Month {
   JAN,FEB,MAR ; // ; Optional
}
     If the enum contains anything else other than constants then the list of constants should be the first
line.
enum Month {
   int num; // C.E
   JAN,FEB,MAR ;
}
     enum in java internally implemented as class concept only. We are allowed to declare main() method in enum and we can involve directly from the command prompt.
E.g
package com.ashok.enums;

enum MyEnum {
   JAN, FEB, MAR;
   public static void main(String arg[]) {
      System.out.println("Welcome to Waytoeasylearn");
   }
}
Output
Welcome to Waytoeasylearn
Note
     Between enum constants, we can apply equality operators (== & !=) and we can’t apply relational operators.

enum Vs Enum Vs Enumeration
1. enum
     enum is a keyword which can be used to define a group of named constants.
2. Enum
     It is a class present in java.lang package. Every enum in java is the direct child class of this class. Hence this Enum class acts as base class for all java enum's .
3. Enumeration
     It is a interface present in java.util package. We can use Enumeration to get the objects one by one from the Collections.

Next Tutorial  Garbage Collection Tutorial

Previous Tutorial  Internationalization Tutorial 
 

No comments:

Post a Comment