[JAVA]注解
0.概述
官方描述:Java 注解(Annotation)用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。
注解:代码里的特殊标记,类比为贴在类、方法、属性、接口上的标签。有了注解,可以在不改变原有代码逻辑的基础上,在源文件中嵌入一些补充信息。即有了这些标记,在编译和运行时访问元数据信息。
1.自定义注解
1.1 格式及使用
/*
1.自定义注解的格式和属性列表说明
*/
public @interface TestAnnotation {
/*
属性列表,支持的属性
*/
//1.1int
int test1();
//1.2字符串
String test2();
//1.3注解
TestAnnotation2 test3();
//1.4枚举,并设置默认值
TestA test4() default TestA.A;
//1.5以上类型数组
String[] test5();
//不可以添加对象
//Person test6();
}
/*
2.使用及属性赋值:
2.1注解中定义了属性,在使用时就需要给属性赋值,已设置默认值的属性可以不赋值
2.2如果属性为value,且只有一个属性需要赋值,则可以省略key,直接赋值即可
2.2数组中如果只有一个元素,则可以省略大括号
*/
@TestAnnotation(test1=1,test2 = "222",test3=@TestAnnotation2,test5 = {
"aaa"})
class Person{
}
1.2 本质
自定义注解:
public @interface TestAnnotation2 {
}
对以上自定义注解先编译: javac TestAnnotation2.java
再反编译: javap TestAnnotation2.class
输出:
public interface TestAnnotation.TestAnnotation2 extends java.lang.annotation.Annotation {
}
本质上就是一个继承了Annotation的接口,注解中的属性值本质上是接口中的抽象