javaSE基础学习笔记 day15
枚举类
背景: 一个类的对象只有有限个,确定的,如星期,季节。
如需定义一组常量时,则优先考虑定义枚举类。
如何定义枚举类
- JDK5.0 之前,自定义枚举类
class Season {
//1.声明对象的属性,为 private final的
private final String seasonName;
//2.私有化类的构造器,并初始化属性
private Season(String seasonName) {
this.seasonName = seasonName;
}
//3.提供当前类的多个对象,为 public static final的
public static final Season SPRINIG = 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");
//4.如有其他诉求,可提供属性的get方法
public String getSeasonName() {
return seasonName;
}
//5.如有其他诉求,可重写父类的 toString() 方法
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
'}';
}
}
- JDK5.0 之后,使用 enum 关键字定义枚举类
注意:如果使用 enum 关键字,则当前类默认继承于 java.lang.Enum 类
enum Season1 {
//提供枚举类的多个对象,多个对象间用“,”隔开,最后一个对象末尾用“;”结束。
SPRING("Spring"),
SUMMER("Summer"),
AUTUMN("Autumn"),
WINTER("Winter");
private final String seasonName;
private Season1(String seasonName) {
this.seasonName = seasonName;
}
}
Enum类中的常用方法
- values():返回当前枚举类型的对象数组。
- valueOf(String objName):返回指定名字的枚举类对象,如果找不到,则抛异常。
- toString():返回当前枚举类对象的名称(从 Enum 类继承来的方法)。
使用 enum 关键字定义枚举类实现接口的情况
- 正常情况:实现接口,在类中重写抽象方法。枚举类中所有对象调用同一方法。
- 如果想要不同对象调用不同方法,可考虑用匿名类机制,分别实现接口中的抽象方法。
public class EnumTest2 {
public static void main(String[] args) {
Season1 s1 = Season1.SPRING;
Season1 s2 = Season1.SUMMER;
Season1 s3 = Season1.AUTUMN;
System.out.println(s1);//aaaaaa
System.out.println(s2);//bbbbbb
System.out.println(s3);//AUTUMN 默认还是调用父类中的 toString
}
}
enum Season1 {
SPRING("Spring") {
@Override
public String toString() {
return "aaaaaa";
}
},
SUMMER("Summer") {
@Override
public String toString() {
return "bbbbbb";
}
},
AUTUMN("Autumn"),
WINTER("Winter");
private final String seasonName;
private Season1(String seasonName) {
this.seasonName = seasonName;
}
}
注解(Annotation):JDK5.0新增
- JDK内置的三个基本注解
① @Override: 限定重写父类方法, 该注解只能用于方法。
② @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为
所修饰的结构危险或存在更好的选择。
③ @SuppressWarnings: 抑制编译器警告。 - JDK 中的元注解
① @Retention:指定该 Annotation 的生命周期:SOURCE:在源文件中有效;CLASS:在class文件中有效;RUNTIME:在运行时有效(即运行时保留),只有在运行时有效,程序才能通过反射获取该注释。