一、基本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。