-
注解:是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件。
-
格式:以“@注释名”在代码中存在,还可以添加一下参数值。
@SuppressWarnings(value = "unckecked")
-
使用:可以附加在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,可以通过反射机制实现对这些元数据的访问。
注解类MyAnno.java
@Inherited//子类可以继承父类
@Documented//注解将包含在javadoc中
@Retention(RetentionPolicy.RUNTIME )
@Target(value = {ElementType.METHOD,ElementType.TYPE})
public @interface MyAnno {
//注解的参数--->参数类型+参数名()
String value();
int age() default 1;
int id() default 1;
}
实验类Anno.java
public class Anno {
@MyAnno(value = "jack",age = 18,id=10001)
public void info(String name,int age,int id){
System.out.println("姓名:"+name+"_年龄:"+age+"_身份:"+id);
}
}
测试类TestAnno.java
public class TestAnno {
public static void main(String[] args) throws Exception {
//获取类对象
Class<?> aClass = Class.forName("com.annotation.Anno");
//获取类中方法
Method info= aClass.getMethod("info", String.class, int.class, int.class);
//获取注解
MyAnno myAnno = info.getAnnotation(MyAnno.class);
System.out.println(myAnno.value());
System.out.println(myAnno.age());
System.out.println(myAnno.id());
Anno anno = (Anno) aClass.newInstance();
info.invoke(anno,myAnno.value(),myAnno.age(),myAnno.id());
}
}
输出
jack
18
10001
姓名:jack_年龄:18_身份:10001