先来看一下不用枚举怎么表示常量:
//常量类
classNum {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 classTest{public static voidmain(String[] args) {
System.out.println(Num.THREE);
}
}
再来看一下用了枚举怎么表示常量:
//常量类(枚举类)
enumNum {
ONE,TWO,THREE,FOUR,FIVE
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.THREE);
}
}
当然枚举还能用于 switch
//常量类(枚举类)
enumNum {
ONE,TWO,THREE,FOUR,FIVE
}//测试类
public classTest{public static voidmain(String[] args) {
Num num=Num.THREE;switch(num) {caseONE:
System.out.println(Color.ONE);break;caseTWO:
System.out.println(Color.TWO);break;caseTHREE:
System.out.println(Color.THREE);break;caseFIVE:
System.out.println(Color.FIVE);break;
}
}
}
那么问题来了!
枚举的成员是什么数据类型? 看下面的例子:
//常量类(枚举类)
enumNum {
ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5);//构造方法(构造方法放在枚举成员的后面)
Num (intdata){}
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.FOUR);
}
}
通过上面的例子可以看出,枚举侧成员就是一个对象,成员对象的数据,与构造方法相关,每个成员对象的数据结构相同。
这里我们就可以理解Java枚举的一类相同的对象,这些对象内部的数据结构与枚举类的构造方法相关。
接下来进一步验证枚举成员的数据结构是不是与构造方法相关:
//常量类(枚举类)
enumNum {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");//构造方法
Num (intdata,String str){}
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.FOUR);
}
}
通过上面的例子可以看出,枚举成员的数据结构只与构造方法相关。
那怎么取出枚举成员的数据呢?通过观察▲可以看出枚举类中还没有get和set方法。
//常量类(枚举类)
enumNum {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");//构造方法
Num (intdata,String str){this.data=data;this.str=str;
}//成员变量
intdata;
String str;//get方法
intgetData(){returndata;
}
String getStr(){returnstr;
}
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.FOUR.getData());
System.out.println(Num.FOUR.getStr());
}
}
通过通过添加枚举类的成员变量和get方法之后成功获取了,成员的数据。
这时再来回看java枚举类,就能发现Java枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。
添加set方法之后就能修改它的值了:
//常量类(枚举类)
enumNum {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");//构造方法
Num (intdata,String str){this.data=data;this.str=str;
}//成员变量
intdata;
String str;//get方法
intgetData(){returndata;
}
String getStr(){returnstr;
}//set方法
void setData(intdata){this.data =data;
}voidsetStr(String str){this.str =str;
}
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.FOUR.getStr());
Num.FOUR.setStr("四");
System.out.println(Num.FOUR.getStr());
}
}
枚举侧常规用法:
//常量类(枚举类)
enumNum {
ONE(1, "小米"),TWO(2, "华为"),THREE(3, "苹果"),FOUR(4, "菠萝"),FIVE(5, "坦克");//构造方法
Num (intindex,String name){this.index =index;this.name =name;
}//成员变量
intindex;
String name;//get方法
intgetIndex(){returnindex;
}
String getName(){returnname;
}//set方法
void setIndex(intindex){this.index =index;
}voidsetName(String name){this.name =name;
}//根据index获取 name
static String getNameByIndex(intidx){for(Num n : Num.values()) {if (n.getIndex() ==idx) {returnn.name;
}
}return "没有找到";
}
}//测试类
public classTest{public static voidmain(String[] args) {
System.out.println(Num.getNameByIndex(3));
}
}