java注解

  • 注解:是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件。

  • 格式:以“@注释名”在代码中存在,还可以添加一下参数值。

    @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
原文地址:https://www.cnblogs.com/netu/p/13796328.html