什么是注解? 注解就是给一个资源加上特定的标注,在运行期间JVM可以识别
注解的作用是? 配合反射做出更灵活的操作
注解在使用之前需要先定义,可以在定义注解的上面加两个重要注解
1. @Target()
@Target(ElementType.TYPE)//括号里可以限定注释在哪些资源上使用
@Target({ElementType.TYPE,ElementType.METHOD})//当定位多个时用大括号括起,之间用逗号隔开
2. @Retention()
@Retention(RetentionPolicy.RUNTIME)
@Retention注解,用于标注当前注解的保留级别,有三个选项
* RetentionPolicy.SOURCE 注解仅保留在源代码中
* RetentionPolicy.CLASS 注解保留在字节码中,但是反射机制不能调用
* RetentionPolicy.RUNTIME 注解保留在字节码文件中,并且可以被反射机制所使用
* 当不指定@Retention时,默认的保留级别为CLASS,因此我们通常都需要明确指出保留级别为RUNTIME
注解中可以定义参数
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {
/*
定义参数的格式为:
格式:类型 参数名() [default 默认值]
注:default可选,用于为当前参数定义默认值。如果不指定,则使用注解时必须为次参数赋值。
使用注解传参时格式:
@注解名(参数名1=参数值1[,参数名2=参数值2,....])
如果注解@AutoRunMethod只有一个参数,且参数名为num时,那么使用时格式如下:
@AutoRunMethod(num=1)
=============重点=============
如果注解中只有一个参数,参数名建议选取value,这样的好处是,使用是可以不指定参数民,如:
@AutoRunMethod(1)
如果指定了默认值,则可以不指定参数,例如:
@AutoRunMethod() 此时注解中参数的使用default的默认值
*/
//为注解定义一个int型的参数
// int num() default 1;//一个参数时,参数名不建议选取value意外的名字。
int value() default 1;
}
与注释有关的方法
isAnnotationPresent(注释名.class) 返回boolean值
类对象.isAnnotationPresent(注释名.class) 判断此类是否被该注释注释
方法对象.isAnnotationPresent(注释名.class) 判断此方法是否被该注释注释