Java之枚举类和注解

1、总结

在某些情况下,一个类的对象是有限而且固定的。例如季节类,只能有 4 个对象
手动实现枚举类:

  1. private 修饰构造器
  2. 属性使用 private final 修饰
  3. 把该类的所有实例都使用 public static final 来修饰

枚举类和普通类的区别:

  1. 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
  2. 枚举类的构造器只能使用 private 访问控制符
  3. 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加 public static final 修饰
  4. 所有的枚举类都提供了一个 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:

  1. @Override: 限定重写父类方法, 该注释只能用于方法
  2. @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
  3. @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() {}
}
posted @ 2019-12-15 22:03  吓吾一跳  阅读(784)  评论(0编辑  收藏  举报