java 注解

91 阅读3分钟

一 什么是注解

注解(Annotation),也叫元数据。注解其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。 使用注解时要在其前面增加@符号,并把该注解当成一个修饰符使用。用于修饰它支持的程序元素。

1.jdk内置的三个注解

@Override:限定重写父类方法,该注解只能用于方法

image.png

@Deprecated:用于表示所修饰的元素(类,方法,构造器,属性等)已过时。通常是因为所修饰的结构危险或存在更好的选择

image.png

image.png

@SuppressWarnings:抑制编译器警告

2. 自定义注解

定义注解

image.png

参照注解

image.png

使用注解

(1)使用注解的话,如果你定义了配置参数,就必须给配置参数进行赋值操作 image.png

image.png

(2)如果只有一个参数,并且这个参数的名字为value的话,那么value=可以省略不写。

image.png

(3)如果你给配置参数设置默认的值了,那么使用的时候可以无需传值:

image.png

(4)一个注解的内部是可以不定义配置参数的

image.png

image.png

3 元注解

元注解是用于修饰其它注解的注解。

举例:

image.png

IDK5.0提供了四种元注解:Retention, Target Documented, Inherited

Retention

1 @Retention:用于修饰注解,用于指定修饰的那个注解的生命周期,@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值:

RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丟弃这种策略的注释,在.class文件中不会保留注解信息

image.png

RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。如果注释没有加Retention元注解,那么相当于默认的注解就是这种状态

image.png

RetentionPoicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注释,加载在内存中了,那么程序可以通过反射获取该注释。

Target

用于修饰注解的注解,用于指定被注解能用于修饰哪些程序元素。 @Target也包含一个名为value的成员变量。

image.png

Documented

用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc是 不包括注解的,但是加上了这个注解生成的文档中就会带着注解了

案例:

image.png

Inherited

被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。

image.png