概述
注解(Annotation)
就是java代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。
注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处。
自定义注解
自己定义的注解
public @interface 注解名称{
public 属性类型 属性名()default 默认值;
}
注解原理:
注解本质是一个接口,Java中所有注解都是继承了Annotation接口;
@注解(...):其实就是一个实现类对象,实现了该注解以及Annotation接口。
注意:如果注解中只有一个value属性,使用注解时,value名称可以不写!!
元注解
修饰注解的注解
解析注解
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest4{
String value();
double aaa() default 100;
String[] bbb();
}
@MyTest4(value ="蜘蛛精",aaa=99.5,bbb ={"至尊宝","黑马”})
public class Demo {
@MyTest4(value ="孙空",aaa=199.9,bbb ={"紫霞","牛夫人"})
public void test1(){
}
}
public void parseclass(){
//1、先得到Class对象
Class c= Demo.class;
//2、解析类上的注解
// 判断类上是否包含了某个注解
if(c.isAnnotationPresent(MyTest4.cass)){
MyTest4 myTest4 =(MyTest4)c.getDeclaredAnnotation(MyTest4.class);
System.out.println(myTest4.value());
System.out.println(myTest4.aaa());
System.out.println(Arrays.tostring(myTest4.bbb()));
}
}
public void parseMethod()throws Exception {
// 1、先得到Class对象
Class c= Demo.class;
Method m=c.getDeclaredMethod("test1");
// 2、解析方法上的注解
//判断方法对象上是否包含了某个注触
if(m.isAnnotationPresent(MyTest4.class)){
MyTest4 myTest4=(MyTest4)m.getDeclaredAnnotation(MyTest4.class);
System.out.println(myTest4.value());
System.out.println(myTest4.aaa());
System.out.println(Arrays.tostring(myTest4.bbb()));
}
}