聊聊java中的枚举类

版权声明:本文为博主原创文章,转载附上地址就可以啦,多交流,一起进步。 https://blog.csdn.net/weixin_30363263/article/details/83897600

1、枚举类是 java.lang.Enum 类的子类,其中RED、GREEN、YELLOW都是Light预定义好的Light的实例。

在运行期间,我们无法再创建新的Enum的实例

public enum Light {

       // 利用构造函数传参

       RED (1), GREEN (3), YELLOW (2);

       // 定义私有变量

       private int nCode ;

       // 构造函数,枚举类型只能为私有

       private Light( int _nCode) {

           this . nCode = _nCode;

       }

       @Override

       public String toString() {

           return String.valueOf ( this . nCode );

       }

    }

注意:枚举类的构造方法一定要是private,这样可以保证不会在类外面定义类的实例)

枚举类定义默认都是public static final;

2、为什么选择枚举类而不是静态常量

    1)静态常量的方法

在静态常量的方法中隐藏着一些问题,这些常量是Java中int类型的常量,这意味着该方法可以接受任何int 类型的值,即使它和WeekDay中定义的所有日期都对应不上。因此,您需要检测上界和下界,在出现无效值的时候,可能还要抛出一个IllegalArgumentException。

public class WeekDay {

        public static final int MONDAY = 1;

        public static final int TUESDAY = 2;

        public static final int WENSDAY = 3;

        public static final int THURSDAY = 4;

        public static final int FRIDAY = 5;

}

    2)枚举类的方法

public class WeekDay {

         public static final WeekDay MONDAY = new WeekDay(1);

         public static final WeekDay TUESDAY = new WeekDay(2);

         public static final WeekDay WENSDAY = new WeekDay(3);

         public static final WeekDay THURSDAY = new WeekDay(4);

         public static final WeekDay FRIDAY = new WeekDay(5);

         public int getValue(){

                   return value;

         }

         private int value;

         private WeekDay(int i){

                   this.value = i;

         }

}

使用枚举的好处就是程序现在接受的不是int类型的数据了,而是WeekDay的一个预定义好的static final的实例(WeekDay.TUESDAY等 )。由于他们都是单例的,因此可以选择使用equals或者==。

3、enum常用方法的使用

public static enum Light {
    RED,YELLOW,BLUE
}

public static void main(String args[]) {
    for(Light light:Light.values()) {
        System.out.println(light.toString());
    }
    System.out.println(Light.valueOf("RED"));
}

在比较两个枚举类型的值时, 永远不需要调用 equals, 而直接使用“ = = ” 就可以。

猜你喜欢

转载自blog.csdn.net/weixin_30363263/article/details/83897600