Java注解阐述

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值