Java注解阐述

来源:互联网 发布:欧迪臣bit one软件 编辑:程序博客网 时间:2024/05/17 09:29

首先我们来看一下注解的声明:

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.METHOD)   //表示注解用于方法声明/** * 表示需要在什么级别保存该注解信息,RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。 */@Retention(RetentionPolicy.RUNTIME)/* * 注解的声明和接口很相似,只是在前面加一个@ */   public @interface Usecase {        public String id();  public int age();  public String addr() default "shanghai";//注解可以设置默认值}

接下来创建一个实体类用于使用注解

public class PersonPro {    /**     * 一旦在Annotation里定义了成员变量之后,之后使用Annotation就要为该Annotation的成员变量指定值     */   @Usecase(age=23,id="1")       public void getInfo(){       System.out.println("测试注解");   }    @Usecase(age=33,id="2")    public void getAddr(){        System.out.println("测试注解01");    }}

最后进入代码测试区

import java.lang.reflect.Method;public class TestMain {    /**     * @param args     */    public static void main(String[] args) {         PersonPro person = new PersonPro();         Class<?> c1 = person.getClass();   //通过反射提取注解信息         for (Method m : c1.getDeclaredMethods()) {            Usecase uc = m.getAnnotation(Usecase.class);     //创建注解的实例            System.out.println("age ="+uc.age()+" addr="+uc.addr()+" id="+uc.id());        }    }}

注解的本质:
1.注解实质上会被编译器编译为接口,并且继承java.lang.annotation.Annotation接口。
2.注解的成员变量会被编译器编译为同名的抽象方法。
3.根据Java的class文件规范,class文件中会在程序元素的属性位置记录注解信息。例如,RuntimeVisibleAnnotations属性位置,记录修饰该类的注解有哪些;flags属性位置,记录该类是不是注解;在方法的AnnotationDefault属性位置,记录注解的成员变量默认值是多少。

0 0