常见注解
- @Override检查被注解的方法是否为重写的父类方法
- @Deprecated被注解的内容为已过时
- @SuppressWarnings(“all”)压制警告(清除编译器黄色警告)
自定义注解
结构
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
注解其实就是一个接口,这个接口继承Annotation这个接口
属性
属性就是接口中的抽象方法
注解对属性有一些要求
1. 属性的返回值类型只能是
- 基本数据类型
- 字符串
- 枚举
- 注解
- 上述类型的数组
2. 用了属性就要给属性赋值
3. 定义属性时用了default设置了默认值,则在使用注解是就不需要进行赋值了
4. 当只有一个属性需要赋值时,并且名称为value时,使用注解时赋值就可以不用写value = ?这种,可以直接写数值。
一般写法: @SuppressWarnings(value = "all")
满足上述条件写法 : @SuppressWarnings("all")
5. 数组赋值时用{}包裹,如果只有一个值,则{}可以省略
元注解
描述注解的注解
常见元注解
1.@Target注解作用的位置
-作用于类@Target(ElementType.TYPE)
-作用于成员方法@Target(ElementType.METHOD)
-作用于成员变量@Target(ElementType.FIELD)
-@Target({ElementType.FIELD,ElementType.TYPE})
2.@Retention注解被保留的阶段
-@Retention(RetentionPolicy.RUNTIME)运行时
-@Retention(RetentionPolicy.CLASS)类对象
-@Retention(RetentionPolicy.SOURCE)源代码
3.@Documented 注解被抽取到api文档
4.@Inherited 注解被子类继承
解析注解
1.获取所注解的位置的对象(Class,Mehtod,Field)
2.获取注解 对象.getAnnotation(注解.Class)
3.获取注解所配置的值
//第一步拿对象
Class<Main> mainClass = Main.class;
//第二步拿注解
Shi annotation = mainClass.getAnnotation(Shi.class);
//第三布拿数据
String value = annotation.value();