web18_annotation

概述

  • Annotation 注解,是一种代码级别的说明。自JDK1.5之后引入,与类、接口、枚举是在同一层次。注释是写给开发人员看的,注解是写给机器看的。
  • 注解的作用
    • 编译检查 @Override
    • 代码分析
    • 编写文档

注解的定义

// 定义注解
public @interface MyAnnotation {

	// 定义注解中的属性
    public abstract String username() default "ade";

}
  • 注解使用 @interface 来定义,使用public来修饰;如果不用public来修饰,不能在包外被引用
  • 自定义注解中的属性定义
    • 属性格式:修饰符(public abstract) 返回值类型 属性名() [default 默认值]
    • 修饰符:默认public abstract,可以省略
    • 返回值类型:基本类型 String Class 注解 枚举 及以上类型的一维数组
    • 属性名:自定义
    • default 默认值:可以省略

注解的使用

@MyAnnotation(username = "ade")
public class MyTest {

	@Test
    public void test() {
        boolean flag = MyTest.class.isAnnotationPresent(MyAnnotation.class);
        System.out.println(flag);  // false
    }
    
}
  • 注解可以没有属性;如果有属性,需要被小括号括住
  • 属性格式:属性名=属性值,属性名={属性值1,属性值2,······}
  • 在一个对象上,注解只能使用一次

注解的解析

  • 我们在类、方法上使用注解后,需要通过解析来获取注解的属性,JDK提供java.lang.reflect.AnnotatedElement接口允许在运行时通过反射来获取
  • AnnotatedElement API
    在这里插入图片描述
  • 但是,上面的案例中结果是false。那是因为每个自定义注解,必须使用JDK自带的元注解修饰才能使用。

JDK 元注解

  • 所谓元注解,就是用来修饰注解的注解。
  • JDK总共提供了4种元注解
    • @Retention:用来确定注解的生命周期
      • RetentionPolicy.SOURCE:被修饰的注解只能出现在源码中,字节码class没有。用途:提供编译器使用。
      • RetentionPolicy.CLASS:被修饰的注解只能存在源码或者字节码中,运行时内存中没有。用途:JVM使用
      • RetentionPolicy.RUNTIME:被修饰的注解存在源码、字节码、内存中。用途:取代xml配置。
    • @Target:用来确定注解的使用位置
      • ElementType.TYPE:修饰类、接口
      • ElementType.CONSTRUCTOR:修饰构造函数
      • ElementType.METHOD:修饰方法
      • ElementType.FIELD:修饰属性
    • @Documented:使用javaDoc生成api文档时,是否包含此注解
    • @Inherited:如果父类使用被修饰的注解,子类是否使用
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.TYPE)
      public @interface MyAnnotation {
      
          public abstract String username() default "ade";
      
      }
      
  • 重新修改后,测试用例输出:true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值