注解:可以理解为一种特殊的注释,也可以理解成是代码中的特殊标记。
注解主要作用于类/方法/变量上面。
最常见的注解是@Override,被改注解修饰的方法是【被重写的方法】。
public interface Test01 {
void method1();
}
class Test01Impl implements Test01{
@Override
public void method1() {
}
}
注解在被解析之后才会生效。
解析注解常见的方法有两个:
1、编译期扫描:编译器在编译java代码的时候扫描代码中的注解并做相应的处理。
2、运行期通过反射处理:框架中的注解一般都是在运行期通过反射进行处理的。
自定义注解怎么写?可以使用元注解去自定义注解。
java中有修饰注解的注解,我们可以称之为元注解。
常用的元注解有四个:@Retention、@Target、@Document、@Inherited
@Retention:定义注解的保留策略(注解在哪里存在)
可选策略有三个:SOURCE、CLASS、RUNTIME。
SOURCE:注解存在于源码中
CLASS:注解存在于.class结尾的字节码文件中,运行期无法通过反射获取
RUNTIME:注解存在于字节码文件中,但运行期可以通过反射获取到,框架中的注解一般都使用
@Retention(RetentionPolicy.RUNTIME)
@Target:定义注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Document:Javadoc工具会将【被该注解标记的元素】的【注解信息】包含在javadoc中,默认情况下,元素的注解信息不会被包含在javadoc中。
@Inherited:对于类来说,子类要继承父类的注解需要该父类被 @Inherited 标识。
如何自定义注解?