枚举类与注解
类的对象 只有 有限个 , 确定的
当需要 定义 一组 常量 时,推荐 枚举类
如果 枚举类 中 只有 一个 对象 ,则可以 作为 单例 模式的 实现方式
*如何自定义 枚举类
方式一 : jdk 1.5 之前, 自定义 枚举类
package SeaTest;
//自定义一个枚举类
public class SeasonTest {
public static void main(String[] args) {
final Season spring = Season.SPRING;
System.out.println(spring);
Season season=new Season("1","2");
System.out.println(season);
}
//自定义枚举类
static class Season{
//1.声明 seanson 对象 属性
private final String seasonName;
private final String seaonDesc;
//2.私有化构造器,给对象赋值
private Season(String seasonName,String seaonDesc){
this.seasonName=seasonName;
this.seaonDesc=seaonDesc;
}
//3.提供当前 枚举类的 多个对象
public static final Season SPRING =new Season("春天","春1");
public static final Season SUMMER =new Season("夏天","春2");
public static final Season FULL =new Season("秋天","春3");
public static final Season WINTER =new Season("冬天","春4");
//4.其他诉求 : 获取 枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeaonDesc() {
return seaonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seaonDesc='" + seaonDesc + '\'' +
'}';
}
}
}
Season{seasonName='春天', seaonDesc='春1'}
Season{seasonName='1', seaonDesc='2'}
方式二 : jdk 5.0 之后 , 使用 关键字 enum 定义 枚举类
package SeaTest;
//自定义一个枚举类
public class SeasonTest2 {
public static void main(String[] args) {
final Season full = Season.FULL;
System.out.println(full);
//定义枚举类 默认 继承于 class java.lang.Enum
System.out.println(full.getClass().getSuperclass());
}
//使用关键字 enum定义枚举类
enum Season{
//1.提供当前枚举类对象,多个对象之间用 “,”隔开,“;”结尾 置顶
SPRING ("春天","春1"),
SUMMER ("夏天","春2"),
FULL ("秋天","春3"),
WINTER ("冬天","春4");
//1.声明 seanson 对象 属性
private final String seasonName;
private final String seaonDesc;
//2.私有化构造器,给对象赋值
private Season(String seasonName,String seaonDesc){
this.seasonName=seasonName;
this.seaonDesc=seaonDesc;
}
//3.提供当前 枚举类的 多个对象
//4.其他诉求 : 获取 枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeaonDesc() {
return seaonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seaonDesc='" + seaonDesc + '\'' +
'}';
}
}
}
Season{seasonName='秋天', seaonDesc='春3'}
class java.lang.Enum
** emun类 中 的 常用方法
package SeaTest;
//自定义一个枚举类
public class SeasonTest2 {
public static void main(String[] args) {
final Season1 full = Season1.FULL;
System.out.println(full);
System.out.println("----------------------");
//定义枚举类 默认 继承于 class java.lang.Enum
System.out.println(full.getClass().getSuperclass());
System.out.println("----------------------");
Season1 full1 = Season1.valueOf("FULL");
System.out.println(full1);
System.out.println("----------------------");
final Season1[] values = Season1.values();
for (Season1 value : values) {
System.out.println(value);
}
}
//使用关键字 enum定义枚举类
enum Season1{
//1.提供当前枚举类对象,多个对象之间用 “,”隔开,“;”结尾 置顶
SPRING ("春天","春1"),
SUMMER ("夏天","春2"),
FULL ("秋天","春3"),
WINTER ("冬天","春4");
//1.声明 seanson 对象 属性
private final String seasonName;
private final String seaonDesc;
//2.私有化构造器,给对象赋值
private Season1(String seasonName,String seaonDesc){
this.seasonName=seasonName;
this.seaonDesc=seaonDesc;
}
//3.提供当前 枚举类的 多个对象
//4.其他诉求 : 获取 枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeaonDesc() {
return seaonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seaonDesc='" + seaonDesc + '\'' +
'}';
}
}
}
Season{seasonName='秋天', seaonDesc='春3'}
----------------------
class java.lang.Enum
----------------------
Season{seasonName='秋天', seaonDesc='春3'}
----------------------
Season{seasonName='春天', seaonDesc='春1'}
Season{seasonName='夏天', seaonDesc='春2'}
Season{seasonName='秋天', seaonDesc='春3'}
Season{seasonName='冬天', seaonDesc='春4'}
Process finished with exit code 0
枚举类实现 接口
** 注解
- 自定义 注解
关键字 @interface
-
- 注解声明 @interface
-
- 内部定义成员 ,通常 是 value 表示
-
- 可以指定 成员的 默认值 ,使用 default 定义
-
- 如果自定义 注解 没有成员 ,表明 是 一个标识作用
-
- 如果注解 有成员 , 在使用时, 需要指明 成员的 值
-
- 自定义 注解 必须 配上 注解的信息 处理 流程 (使用反射)
- 7.通常 会指明 @Retention @Target
package SeaTest;
public @interface MyAnnotation {
String[] value() default "hi";
}
@MyAnnotation(value = "dy")
class Test{
}
JDK 5 提供的 元注解
元注解 : 对现有的注解 进行 解释说明
jdk8 中 注解的 新特性 : 可重复注解 类型注解