先来看一下不用枚举怎么表示常量:
//常量类 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枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。