JDK1.5之前需要自定义枚举类
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
若枚举只有一个成员, 则可以作为一种单例模式的实现方式
public class TestSeason {
public static void main(String args[]){
Season spring=Season.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
}
}
//枚举类
class Season{
//1.提供类的属性,声明为private final
private final String seasonName;
private final String seasonDesc;
//2.声明为final的属性,在构造器中初始化
private Season(String seasonName,String seasonDesc){
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
//3.通过公共的方法来调用属性
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
//4.创建为类的对象:将类的对象声明为public static final
public static final Season SPRING = new Season("spring","春暖花开");
public static final Season SUMMER = new Season("summer","夏日炎炎");
public static final Season AUTUMN = new Season("autumn","秋高气爽");
public static final Season WINTER = new Season("winter","白雪皑皑");
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
}
public void show(){
System.out.println("这是一个季节");
}
}
JDK 1.5 新增的 enum 关键字用于定义枚举类
必须在枚举类的第一行声明枚举类对象。
使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
列出的实例系统会自动添加 public static final 修饰
枚举类的主要方法:
values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
public class TestSeason1 {
public static void main(String args[]){
Season1 spring=Season1.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
//1.values()
Season1 seasons[]=Season1.values();
for(int i=0;i//2.valueOf(String name) 要求传入的形参name是枚举类对象的名字。否则,报java.lang.IllegalArgumentException异常
String str="SPRING";
Season1 sea=Season1.valueOf(str);
System.out.println(sea);
Thread.State states[]=Thread.State.values();
for(int i=0;ivoid show();
}
//枚举类
enum Season1 implements Info{
SPRING("spring","春暖花开"){
public void show(){
System.out.println("春天在哪里?");
}
},
SUMMER("summer","夏日炎炎"){
public void show(){
System.out.println("生如夏花");
}
},
AUTUMN("autumn","秋高气爽"){
public void show(){
System.out.println("秋天是分手的季节");
}
},
WINTER("winter","白雪皑皑"){
public void show(){
System.out.println("冬天里的一把火");
}
};
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName,String seasonDesc){
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
}
// public void show(){
// System.out.println("这是一个季节");
// }
}
public @interface MyAnnotation {
String value() default "hello";
}