如何理解java枚举

先来看一下不用枚举怎么表示常量:

//常量类
class Num {
    public static String ONE = "ONE";
    public static String TWO = "TWO";
    public static String THREE = "THREE";
    public static String FOUR = "FOUR";
    public static String FIVE = "FIVE";
}

//测试类
public class Test{
    public static void main(String[] args) {
        System.out.println(Num.THREE);
    }
}

 

再来看一下用了枚举怎么表示常量:

//常量类(枚举类)
enum Num {
    ONE,TWO,THREE,FOUR,FIVE
}

//测试类
public class Test{
    public static void main(String[] args) {
        System.out.println(Num.THREE);
    }
}

 

当然枚举还能用于 switch

//常量类(枚举类)
enum Num {
    ONE,TWO,THREE,FOUR,FIVE
}

//测试类
public class Test{
    public static void main(String[] args) {
        Num num = Num.THREE;  
        switch (num) {  
        case ONE:  
            System.out.println(Color.ONE);  
            break;  
        case TWO:  
            System.out.println(Color.TWO);  
            break;  
        case THREE:  
            System.out.println(Color.THREE);   
            break;  
        case FIVE:  
            System.out.println(Color.FIVE);  
            break;      
        }  
    }
}

 

 

那么问题来了!

枚举的成员是什么数据类型?  看下面的例子:

//常量类(枚举类)
enum Num {
    ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5);
    //构造方法(构造方法放在枚举成员的后面)
    Num (int data){}
}

//测试类
public class Test{
    public static void main(String[] args) {
        System.out.println(Num.FOUR); 
    }
}

通过上面的例子可以看出,枚举侧成员并没有数据类型,成员里面的数据才拥有数据类型,而且内部的数据类型与构造方法相关。

这里我们就可以理解Java枚举的一类相同的对象,这些对象内部的数据结构与枚举类的构造方法相关。

 

 

接下来进一步验证枚举成员的数据结构是不是与构造方法相关:

//常量类(枚举类)
enum Num {
    ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
    //构造方法
    Num (int data,String str){}
}

//测试类
public class Test{
    public static void main(String[] args) {
        System.out.println(Num.FOUR); 
    }
}

通过上面的例子可以看出,枚举成员的数据结构只与构造方法相关。
那怎么取出枚举成员的数据呢?通过观察我们发现枚举类中还没有get和set方法。

 

//常量类(枚举类)
enum Num {
    ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
    //构造方法
    Num (int data,String str){
        this.data=data;
        this.str=str;
    }
    
    //成员变量
    int data;
    String str;
    
    //get方法
    int getData(){
        return data;
    }
    String getStr(){
        return str;
    }
    
}

//测试类
public class Test{
    public static void main(String[] args) {
        System.out.println(Num.FOUR.getData()); 
        System.out.println(Num.FOUR.getStr()); 
    }
}

通过通过添加枚举类的成员变量和get方法之后成功获取了,成员的数据。

这时再来回看java枚举类,就能发现Java枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。

 

上一篇:分布式事务-3pc(three-phase commit)


下一篇:three.js使用超炫酷的鼠标跟随案例