- 主要使用在框架中的反射
内置注解
@Deprecated 已过时
参数:since 过时版本 forRemoval 是否移除
可以标注在类、方法、属性
@Override 重写父级方法
只能标注在实例方法上且父级必须存在该方法
@SuppressWarnings 抑制警告
rawtypes 抑制未使用泛型警告 all 抑制所有警告 等等
有问题解决问题,不建议使用
@FunctionalInterface 函数接口
检查该接口有且只能一个抽象方法
只能标注在接口类上
自定义注解
- 声明自定义注解
// 自定义注解使用关键字@interface
public @interface MyAnnotation {
/**
* 自定义注解属性
* 属性名后面必须添加:()
* 语法:
* 属性类型 属性的名字()
* 使用 default 关键字指定默认值
*
*/
String value() default "默认值";
}
- 使用自定义注解
**
* 注解语法:@自定义注解名(属性名 = 属性值)
* 如果注解中有属性,使用的时候必须给属性赋值,否则报错,除非定义的注解的属性有默认值
* 如果属性只有一个且名为value 可以不写属性名
* 如果属性只有一个且名为value 的 数组 可以直接写值{},如果数组的值只有一个,可以不写{}
*/
@MyAnnotation(value = "aaa")
public void m() {}
元注解
- 用来标注注解的注解叫做元注解。(也是JDK内置的注解。)
常用的元注解:
@Retention:设置注解的保持性
@Target:设置注解可以出现的位置
@Documented:设置注解是否可以生成到帮助文档中
@Inherited:设置注解是否支持继承
@Repeatable:设置注解在某一个元素上是否可以重复使用(Java8的新特性。)
- @Retention:
① Retention英文意思有保留、保持的意思,它表示注解存在阶段是保留在源代码(编译期),字节码(类加载)或者运
行时(JVM中运行)
② 在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期。
@Retention(RetentionPolicy.SOURCE):注解仅存在于源代码中,在字节码文件中不包含。
@Retention(RetentionPolicy.CLASS):注解在字节码文件中存在,但运行时无法获得(默认)
@Retention(RetentionPolicy.RUNTIME):注解在字节码文件中存在,且运行时可通过反射获取。
- @Target:
用于描述注解可以使用的位置,该注解使用ElementType枚举类型用于描述注解可以出现的位置
ElementType有如下枚举值:
@Target(ElementType.TYPE):作用于接口、类、枚举、注解
@Target(ElementType.FIELD):作用于属性、枚举的常量
@Target(ElementType.METHOD):作用于方法
@Target(ElementType.PARAMETER):作用于方法参数
@Target(ElementType.CONSTRUCTOR):作用于构造方法
@Target(ElementType.LOCAL VARIABLE):作用于局部变量
@Target (ElementType.ANNOTATION TYPE):作用于注解
@Target(ElementType.PACKAGE):作用于包
@Target (ElementType.TYPE PARAMETER):作用于泛型,即泛型方法、泛型类和泛型接口。
@Target(ElementType.TYPE USE):作用于任意类型。