13、枚举和注解
一、枚举(enum)
枚举属于一种特殊的类,里面只包含了一组优先的特定对象
可以取代传统常量的定于方式,即将常量封装在类或接口中
1、枚举的定义
(1)自定义实现枚举
- 私有化构造器,防止新建对象
- 提供getXxx方法,对外暴露,但不提供setXxx方法,因为枚举对象值通常为只读
- 对枚举对象/属性使用final + static共同修饰,实现底层优化
- 枚举对象名通常使用大写(常量命名规范)
- 枚举对象根据需要,可以有多个属性
(2)enum关键字实现枚举(将class换成enum即可)
-
当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类
-
自定义枚举中
public final static Secson SPRING = new Season("春", 雨);
在枚举类中可简化为
SPRING("春", 雨);
,会调用构造器 -
若调用无参构造器创建常量对象,可省略
()
-
多个枚举对象,使用
,
间隔,分号;
结尾 -
枚举对象必须放在枚举类的行首
2、enum常用方法
(1)toString()
:Enum类已经重写过,返回的是当前的对象名,子类可以重写该方法
(2)name()
:返回当前对象名(子类不能重写)
(3)ordinal()
:返回当前对象编号
(4)values()
:返回当前枚举类中所有常量(返回一个数组)——可以用foreach遍历
(5)valueOf()
:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常
(6)compareTo()
:比较两个枚举对象编号,对象A.compareTo(对象B)
——》对象A编号减对象B编号
3、枚举的使用细节
(1)枚举类不能继承其他类,枚举类隐式继承Enum类,Java单继承
(2)可以实现接口
二、注解(Annotation)
1、什么是注解?
(1)注解也称为元数据(Metadata),用于修饰解释包,类,方法,属性,构造器,局部变量等数据类型
(2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码块中的补充信息
(3)在javaSE中,注解使用目的很简单,例如标记过时功能,忽略警告等
在JavaEE中,注解占据了更重要的角色
2、三个基本的注解
(1)@Override
使用说明
- @Override表示指定重写父类的方法,若父类中没有则报错
- 不写@Override注解,但仍然重写,依然构成实际上的重写
- @Override只能修饰方法,不能修饰其他类,包,属性等
- 修饰注解的注解称为元注解
(2)@Deprecated
使用说明
- 用于表示某个原生已经过时
- 可以修饰方法,类某字段,包,参数等
- @Deprecated的作用可以做到新旧版本的兼容和过渡
(3)@SuppressWarning({...})
使用说明
- @SuppressWarning({...}):用于忽略警告,大括号内传入具体忽略信息的类型
- 参数意义
unchecked
:忽略没有检查的警告rawtypes
:忽略传参时没指定泛型的警告unused
:忽略没有使用的警告
3、四种元注解
修饰注解的注解
(1)@Retention
:指定注解的作用范围
@Retention(RetentionPolicy.SOURCE)
SOURCE
:编译器使用后,直接丢弃这种策略的注解CLASS
:编译器将把注解记录在class文件中,运行时,JVM不会保留注解RUNTIME
:JVM会保留注解,程序通过反射获取该注解
(2)@Target
用于修饰注解定义,用于指定被修饰的注解能用于修饰哪些元素
(3)@Docamented
(4)@Inherited
被修饰的注解将具有继承性