>[success] # java 元注解
1. 元注解是可以**注解到注解上的注解**,或者说**元注解是一种基本注解**,但是它能够应用到其它的注解上面。
2. 元注解主要有 **@Retention、@Documented、@Target、@Inherited、@Repeatable**。
>[danger] ##### @Retention
1. RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
2. RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中,默认方式。
3. RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
~~~
import java.lang.annotation.*;
//@Retention(RetentionPolicy.SOURCE) // 表示下面的注解在源代码中有效
//@Retention(RetentionPolicy.CLASS) // 表示下面的注解在字节码文件中有效,默认方式(不写)
@Retention(RetentionPolicy.RUNTIME) // 表示下面的注解在运行时有效
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Documented
1. 使用javadoc工具可以从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档,而该工具抽取时默认不包括注解内容。
2. @Documented用于指定被该注解将被javadoc工具提取成文档。
3. 定义为@Documented的注解必须设置Retention值为RUNTIME。
~~~
@Documented // 表示下面的注解信息可以被javadoc工具提取到API文档中,很少使用
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Target
| 类型 |作用 |
| --- | --- |
| ElementType.ANNOTATION_TYPE| 可以给一个注解进行注解|
| ElementType.CONSTRUCTOR | 可以给构造方法进行注解|
| ElementType.FIELD | 可以给属性进行注解|
| ElementType.LOCAL_VARIABLE | 可以给局部变量进行注解|
| ElementType.METHOD | 可以给方法进行注解|
| ElementType.PACKAGE| 可以给一个包进行注解|
| ElementType.PARAMETER | 可以给一个方法内的参数进行注解|
| ElementType.TYPE | 可以给类型进行注解,比如类、接口、枚举|
~~~
// 表示下面的注解可以用于类型、构造方法、成员变量、成员方法、参数 的修饰
@Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Inherited
1. **@Inherited**并不是说注解本身可以继承,而是说如果一个超类被该注解标记过的注解进行注解时,如果子类没有被任何注解应用时,则子类就继承超类的注解
>[danger] ##### @Repeatable
1. 可以重复使用同一个注解
* 正常重复使用一个注解会报错
![](https://img.kancloud.cn/f6/84/f6848cc959cfc454e3d283f09e9962ce_643x191.png)
* 解决一可以声明一个数组类型注解(java8 之前解决方案)
~~~
public @interface MyAnnotation {
public String value();
}
~~~
~~~
public @interface MyAnnotations {
public MyAnnotation[] value();
}
~~~
~~~
@MyAnnotations({ @MyAnnotation(value = "1"), @MyAnnotation(value = "2") })
public class TestAnnotation {
int a = 1;
}
~~~
* java 8之后解决
~~~
public @interface MyAnnotations {
public MyAnnotation[] value();
}
~~~
~~~
import java.lang.annotation.*;
@Repeatable(value = MyAnnotations.class)
public @interface MyAnnotation {
public String value();
}
~~~
~~~
@MyAnnotation(value = "1")
@MyAnnotation(value = "2")
public class TestAnnotation {
int a = 1;
}
~~~
>[danger] ##### 其他
| 名称 | 作用 |
| --- | --- |
|@author |标明开发该类模块的作者,多个作者之间使用,分割|
|@version| 标明该类模块的版本|
|@see |参考转向,也就是相关主题|
|@since |从哪个版本开始增加的|
|@param |对方法中某参数的说明,如果没有参数就不能写|
|@return| 对方法返回值的说明,如果方法的返回值类型是void就不能写|
|@exception |对方法可能抛出的异常进行说明|
|@Override |限定重写父类方法, 该注解只能用于方法|
|@Deprecated |用于表示所修饰的元素(类, 方法等)已过时|
|@SuppressWarnings| 抑制编译器警告|
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法