# 注解(注释类型)
所有源代码出自Java8
1简单概述
1.1 简单的几点介绍
1.2 自定义注解
public @interface MyAnnotation{
}
- 默认情况下注解可以出现在任意位置。
- 大多数时候,程序员定义自己的注解,并编写自己的处理器来处理他们。
2 jdk内置注解
注解 | 作用 |
---|
@Override | 编译器检查是否是重写的方法。标识性注解,和运行期无关。 |
@Deprecated | 方法被弃用,或者不推荐使用。 |
@SuppressWarnings | 抑制警告。(开发中不用) |
3 元注解
JAVA核心知识点–元注解详解
注解 | 作用 |
---|
@Target | 标注“被标注的注解”可以出现在哪里。 |
@Retention | 标注“被标注的注解”最终保存在哪里。保持性策略 |
| |
3.1 @Target(描述注解的使用范围)
3.2 @Retention(保持性策略)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
取值 | 作用 |
---|
@Retention(RetentionPolicy.SOURCE) | 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; |
@Retention(RetentionPolicy.CLASS) | 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期; |
@Retention(RetentionPolicy.RUNTIME) | 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;可通过反射去获取注解信息 |
4 自定义注解
注解的属性
public @interface MyAnnotation {
String value();
String name() default "a";
int[] arr() default {1};
}
@MyAnnotation(value = "val", name = "na", arr = {1, 2})
@MyAnnotation(value = "val", name = "na", arr = 1)
@MyAnnotation("1")
- 属性名有且仅有value时可以省略。
- 属性的类型可以是:
- 所有基本类型(int、float、boolean等)
- String
- Class
- enum
- Annotation
- 以上类型的数组
- 数组中只有一个元素大括号可以省略。
5 反射注解
getDeclaredMethods()
和 getAnnotation()
,它们都属于 AnnotatedElement 接口(Class,Method 与 Field 类都实现了该接口)。getAnnotation()
方法返回指定类型的注解对象,在本例中就是 “UseCase”。如果被注解的方法上没有该类型的注解,返回值就为 null。我们通过调用 id()
和 description()
方法来提取元素值。注意 encryptPassword()
方法在注解的时候没有指定 description 的值,因此处理器在处理它对应的注解时,通过 description()
取得的是默认值 “no description”。