例如查看@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的这个注解。
总结
比较常用的注解就是前两个