阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_16_注解_自定义注解_元注解








例如查看@Overide的注解
@Target作用是位置,,作用在类上面,还是作用在方法上面
@Retention是它能被保留到什么时候。三个阶段。源码、class、runtime


定义注解类

改成@interface

在创建类的时候可以选择为Annotation类型。

Target

taget里面就一个属性,叫做value

它的类型是ElementType[]这个类型的

它其实就是一个枚举类型


所以我们就可以这么去使用



我们作用在MyAnno3这个类上


作用在方法上可以吗?在方法上加上就会报错,。



成员变量上也不能加




value值是一个数组,加上作用域Method方法上。

再加一个作用字段上。这样既可以作用方法、类、成员变量上这三种都可以。


Retention

源码中对应的类型

RetentionPlicy也是一个枚举类型。分别对应的是源码阶段、class阶段、runtime阶段

一般都是加Runtime这个级别的注解


如果设置Class级别。也会保留到字节码中。但是不会被JVM识别


如果设置为Source。连字节码文件中都不会存在

Documented

将来这个注解描述的这些信息会被抽获取到javadoc的文档中。

桌面上新建文件夹2 然后把Worker.java这个类复制过来。



删除相关代码后。


MyAnno3也复制过来



内容全剪切掉


修改文件的格式

然后把内容再粘贴回来。并保存这个文件。

worker这个类同上,先剪切,再修改格式为 ANSI格式编码。然后再粘贴回来。


右键打开命令行





在这个文件夹内生成api文档

生成后查看,注解被保留了


show方法上面的注解也被保留了

name上的注解没有被保留


所说义这个@Documented 可以被抽获取到javadoc文档中的

如果下面这里把 @Documented 这个注解删掉。


删掉后,重新生成API文档


那么在Worker类里面加的这个几个注解会不会在API中体现?

删掉后,就不会体现了。、虽然加了注解的描述的。但是因为去掉了@Documented这段代码。所以不会在文档中体现

@Inherited

表示这个注解是否会被继承

表示这个注解会自动被此类继承

新建一个Teacher类

Teacher继承Worker这个类。在Teacher类没有加注解。

但是worker这个类有注解。那么Teacher会继承类上面的 @MyAnno3的这个注解。

总结


比较常用的注解就是前两个

 

原文地址:https://www.cnblogs.com/wangjunwei/p/11289586.html