注解:
注解的末尾不可以有分号
系统内置注解:
@Override :检测被该注解标注的方法是否来自于所继承的父类(接口)
@Deprecated :将该注解标注的内容,表示已过时,不建议使用
@SuppressWarnings :压制警告–>不让Idea中右侧显示横线提示
自定义注解:
格式:
元注解 描述注解的注解
public @interface 注解名称{ }
本质:注解本质上就是一个接口,该接口默认继承Annotation 接口
public interface MyAnno extends java.lang.annotation.Annotation { }
属性:接口中可以定义的成员方法(例如抽象方法)
要求
属性的返回值类型 -->基本数据类型、String、枚举、注解、数组
1。定义了属性,在使用时需要给属性赋值 -->定义属性时,可以使用default关键字给属性默认初始化,则使用注解时,可以不进行属性的赋值
2。如果只有一个属性需要赋值,并且属性的名称是 value ,那么在使用注解时 value 可以省略,直接定义值
3。数组赋值时,值使用{ }包裹。如果数组中只有一个值,则{ }省略
使用示范:
元注解
@Target :描述注解能够作用的位置
ElementType取值:
TYPE :可以作用与类上
METHOD :可以作用于方法上
FIELD :可以作用于子成员变量上
@Retention :描述注解被保留的阶段
@Retention(Retention Policy.RUNTIM):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
SOURCE :大概在编译前
CLASS :大概在编译完成后
RUNTIME :运行时
@Documented :描述注解是否被抽取到api文档中
@Inherited :描述注解是否被子类继承
注解的使用(解析注解):
1:获取注解所定义的对象:(Class , Method ,Field)
2:获取指定的注解 getAnnotation(Class)
3:调用注解中的抽象方法获取配置的属性值
小结:
1:以后大多数时候,我们会使用注解,而不是自定义注解
2:注解给谁用?
1.编译器
2.给解析程序用
3:注解解不是程序的一部分,可以理解为注解就是一个标签