废话不说,先创建一个enums的枚举‘类’
看栗子:
package enums; /* * enum:凡是使用enum修饰的都为枚举 属性的集合 进行一一成列出来 * 枚举中的变量全部都是常量 * 为什么要定义枚举? * 因为定义属性需要确定类型,定义枚举不需要定义类型 默认为常量 * * 首先定义枚举一定要先赋值 然后在定义变量 ,否者报错 * 在枚举中可以直接定义汉字(字符串) 拼音 数字之类的内容 进行赋值 * * 枚举不是类,也不是接口,枚举可以理解为常量或数组 但是它并不是对象 * 枚举中可以属性,可以定义构造方法(必须为私有化)和普通方法 还可以定义抽象方法 * 抽象方法可以直接定义在枚举中 * 枚举中可以定义getter setter 方法 以及toString方法 * * 若枚举中定义英文的常量 需要全部大写 * *枚举可以实现接口,一旦实现接口就必须重写接口中定义的抽象方法 * */ public enum Week { 星期一("Monday",1),星期二("Tuesday",2),星期三("Wednesday",3),星期四("Thursday",4), 星期五("Friday",5),星期六("Saturday",6),星期日("Sunday",7); private String desc; private int num; //有参构造方法 private Week(String desc,int num){ this.desc = desc; this.num = num; } //无参构造方法 private Week(){} public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } // public String toString(){ // return desc+","+num; // } // public void test(){ //System.out.println(desc); //swicth int byte short char 将枚举的结果定义为整数常量(final int) switch (星期二) { case 星期一:System.out.println("今天周一");break; case 星期二:System.out.println("今天周二");break; case 星期三:System.out.println("今天周三");break; case 星期四:System.out.println("今天周四");break; case 星期五:System.out.println("今天周五");break; case 星期六:System.out.println("今天周六");break; case 星期日:System.out.println("今天周日");break; } } }
实现:
package enums; public class Test { public static void main(String[] args) { for(Week w:Week.values()){//Week枚举‘类’是静态的,因此直接Class.Week调用就是了 System.out.println(w);//打印所有枚举常量名 System.out.println(w.getDesc());//打印Week‘类’中的Desc属性值 System.out.println(w.getNum());//打印Week‘类’中的Num属性值 } }
enum这个关键字,可以理解为跟class差不多,这也个单独的类。可以看到,上面的例子里面有属性,有构造方法,有getter,也可以有setter,但是一般都是构造传参数。还有其他自定义方法。那么在这些东西前面的,以逗号隔开的,最后以分号结尾的,这部分叫做,这个枚举的实例。也可以理解为,class new 出来的实例对象。这下就好理解了。只是,class,new对象,可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,只能在这个enum里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围,举个栗子:一年四季,只能有春夏秋冬,你要是字符串表示的话,那就海了去了,但是,要用枚举类型的话,你在enum的大括号里面把所有的选项,全列出来,那么这个季节的属性,对应的值,只能在里面挑。不能有其他的。
在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类;在 Java 中使用 enum 关键字来定义枚举类,其地位与 class、interface 相同;枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用);一个 Java 源文件中最多只能有一个 public 类型的枚举类,且该 Java 源文件的名字也必须和该枚举类的类名相同,这点和类是相同的;使用 enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口;所有的枚举值都是 public static final 的,且非抽象的枚举类不能再派生子类;枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。列出这些实例(枚举值)时,系统会自动添加 public static final 修饰,无需程序员显式添加。
使用Java的枚举,让我们的可读性更高:
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。