1、总结
在某些情况下,一个类的对象是有限而且固定的。例如季节类,只能有 4 个对象
手动实现枚举类:
- private 修饰构造器
- 属性使用 private final 修饰
- 把该类的所有实例都使用 public static final 来修饰
枚举类和普通类的区别:
- 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
- 枚举类的构造器只能使用 private 访问控制符
- 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加 public static final 修饰
- 所有的枚举类都提供了一个 values 方法, 该方法可以很方便地遍历所有的枚举值
2、代码
public class Test3 {
public static void main(String[] args) {
Season spring = Season.SPRING;//Season.SPRING这段执行就是获取一个Season对象
spring.showInfo();
// System.out.println(Season.values());
Season spring1 = Season.SPRING;
spring1.showInfo();
//每次执行Season.SPRING获取的是相同的对象,枚举类中的每个枚举都是单例模式
System.out.println(spring.equals(spring1));//true
}
}
enum Season implements Itest{
SPRING("春天","春暖花开"),//此处相当于在调用有参的所有构造private Season(String name,String desc)
SUMMER("夏天","炎炎夏日"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冬风凛冽");
private final String name;
private final String desc;
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public void showInfo() {
System.out.println(this.name+":"+this.desc);
}
@Override
public void test() {
System.out.println("这是实现Itest接口的test方法");
}
}
//实现接口的枚举类
interface Itest{
void test();
}
注解
从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注释)
Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息.
三个基本的 Annotation:
- @Override: 限定重写父类方法, 该注释只能用于方法
- @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
- @SuppressWarnings: 抑制编译器警告.
public class Test4 {
public static void main(String[] args) {
new testInfo().test1();//@Deprecated用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings({ "unused", "rawtypes" })
List list = new ArrayList();//@SuppressWarnings: 抑制编译器警告.
}
}
class testInfo{
void test() {}
@Deprecated
void test1() {}
}