枚举类的创建
使用class的形式
使用 final 定义 常量属性, 通过构造器为常量赋值, 通过重写toString输出描述信息。
package jzq.com.Enum01;
public class Enum01 {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
System.out.println(spring.getSeasonName());
}
}
// 枚举类
class Season {
private final String seasonName;
private final String seasonDesc;
// 1. 私有化构造器
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
// 当前枚举类的对象
public static final Season SPRING = new Season("春天", "春暖花开");
public static final Season SUMMER = new Season("夏天", "热地慌");
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "{" + this.seasonName + ":" + this.seasonDesc + "}";
}
}
使用 enum 关键字 定义枚举类
不用 通过 public static final Season SPRING = new Season(“春天”, “春暖花开”); 手撸枚举对象了。
通过 SPRING(“春天”, “春暖花开”), SUMMER(“夏天”, “热地慌”); 产生枚举对象
不使用class声明类,使用 enum
package jzq.com.Enum02;
public class Enum02 {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
System.out.println(spring.getSeasonName());
Season summer = Season.SUMMER;
System.out.println(summer);
}
}
// 枚举类
enum Season {
// 当前枚举类的对象 (这里注意使用,隔开对象)
SPRING("春天", "春暖花开"),
SUMMER("夏天", "热地慌");
private final String seasonName;
private final String seasonDesc;
// 1. 私有化构造器
private Season(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 "{" + this.seasonName + ":" + this.seasonDesc + "}";
}
}
通过枚举类.values() 遍历所有枚举
Season[] values = Season.values();
Annotation注解(部分截图来源尚硅谷视频)
文档类注解
编译格式检查注解
自定义注解
代码如下
package jzq.com.Enum03;
public @interface MyAnnotation{
String value();
}
四个元注解
@Retention : 指定 Annotation的生命周期
@Target : 指的是Annotation 可以修饰哪些元素
@Documented : 指定明Annotation 修饰的Annotation类将被javadoc工具提取成文档
@Inherited :指明被修饰的Annotation 将具有继承性
jdk8 新特性
可重复注解
类型注解
在自定义注解中的 @Target中 加上 TYPE_USE