一、基本enum特性
package test; enum Fruit{PEACH,LEMON,BANANA,Apple} public class EnumClasstest { public static void main(String[] args){ for(Fruit f:Fruit.values()){ System.out.println(f+" ordinal "+f.ordinal()); System.out.println(f.compareTo(f.LEMON)+" "); System.out.print(f.equals(f.LEMON)+" "); System.out.println(f==f.LEMON); System.out.println(f.name()); System.out.println("-------------------");} for(String s:"PEACH,LEMON,BANANA".split(",")){ Fruit ff = Enum.valueOf(Fruit.class, s); System.out.println(ff); } } }
常用方法
- values():返回包含成员的数组
- ordinal():返回序号
- getDeclaringClass(),返回所属的enum类
- compareTo:返回比较的数值
- name():返回成员名字
- valueOf():返回带制定名称与指定类型的枚举常量
输出结果:
PEACH ordinal 0 -1 false false PEACH ------------------- LEMON ordinal 1 0 true true LEMON ------------------- BANANA ordinal 2 1 false false BANANA ------------------- Apple ordinal 3 2 false false Apple ------------------- PEACH LEMON BANANA
二、向enum中添加构造方法与方法
package enumtest; public enum EnumConstructor { SPRING("人间四月芳菲尽,山寺桃花始盛开."), SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."), AUTOMU("无边落木萧萧下,不尽长江滚滚来."), WINTER("忽如一夜春风来,千树万树梨花开."); private String description; private EnumConstructor(String description){ this.description = description; } public String getdescription(){ return description; } public static void main(String[] args){ for(EnumConstructor e:EnumConstructor.values()){ System.out.println(e.name()+":"+e.getdescription()); } } }
//输出: SPRING:人间四月芳菲尽,山寺桃花始盛开. SUMMER:梅子金黄杏子肥,麦花雪白菜花稀. AUTOMU:无边落木萧萧下,不尽长江滚滚来. WINTER:忽如一夜春风来,千树万树梨花开.必须要在enum之后定义方法和属性,这里的description声明为private实际上没有什么用,因为我们不能在enum定义完成之后再使用其构造器。
三、重载toString方法
package enumtest; public enum EnumConstructor { SPRING("人间四月芳菲尽,山寺桃花始盛开."), SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."), AUTOMN("无边落木萧萧下,不尽长江滚滚来."), WINTER("忽如一夜春风来,千树万树梨花开."); private String description; private EnumConstructor(String description){ this.description = description; } public String getdescription(){ return description; } public String toString(){ String id = this.name(); String lower = id.substring(1).toLowerCase(); return id.charAt(0)+lower+":"+description; } public static void main(String[] args){ for(EnumConstructor e:EnumConstructor.values()){ System.out.println(e.name()+":"+e.getdescription()); } System.out.println(); for(EnumConstructor e:EnumConstructor.values()){ System.out.println(e); } } }
//输出结果: SPRING:人间四月芳菲尽,山寺桃花始盛开. SUMMER:梅子金黄杏子肥,麦花雪白菜花稀. AUTOMN:无边落木萧萧下,不尽长江滚滚来. WINTER:忽如一夜春风来,千树万树梨花开. Spring:人间四月芳菲尽,山寺桃花始盛开. Summer:梅子金黄杏子肥,麦花雪白菜花稀. Automn:无边落木萧萧下,不尽长江滚滚来. Winter:忽如一夜春风来,千树万树梨花开.
这里用到的几个字符串方法
- charAt()
- subString(int begin)
- toLowerCase()
四、Switch语句中的enum
package enumtest; enum Season{ SPRING("人间四月芳菲尽,山寺桃花始盛开."), SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."), AUTOMN("无边落木萧萧下,不尽长江滚滚来."), WINTER("忽如一夜春风来,千树万树梨花开."); private String description; private Season(String description){ this.description = description; } public String getdescription(){ return description; } public String toString(){ String id = this.name(); String lower = id.substring(1).toLowerCase(); return "now is "+id.charAt(0)+lower+":"+description; }} public class EnumSwitch { Season season = Season.SPRING; public void change(){ switch(season){ case SPRING: season=Season.SUMMER;break; case SUMMER: season=Season.AUTOMN;break; case AUTOMN: season=Season.WINTER;break; case WINTER: season=Season.SPRING;break; } } public static void main(String[] args){ EnumSwitch e = new EnumSwitch(); for(int i=0;i<12;i++){ System.out.println(e.season); e.change(); } } }
//输出结果: now is Spring:人间四月芳菲尽,山寺桃花始盛开. now is Summer:梅子金黄杏子肥,麦花雪白菜花稀. now is Automn:无边落木萧萧下,不尽长江滚滚来. now is Winter:忽如一夜春风来,千树万树梨花开. now is Spring:人间四月芳菲尽,山寺桃花始盛开. now is Summer:梅子金黄杏子肥,麦花雪白菜花稀. now is Automn:无边落木萧萧下,不尽长江滚滚来. now is Winter:忽如一夜春风来,千树万树梨花开. now is Spring:人间四月芳菲尽,山寺桃花始盛开. now is Summer:梅子金黄杏子肥,麦花雪白菜花稀. now is Automn:无边落木萧萧下,不尽长江滚滚来. now is Winter:忽如一夜春风来,千树万树梨花开.
注意不要忘记switch语句中的break,否则season将一直是spring。