注解与元注解

5 篇文章 0 订阅

1.注解的介绍

1.引用数据类型:
  类 数组 接口 枚举 注解
      
1.jdk1.5版本的新特性->一个引用数据类型
       和类,接口,枚举是同一个层次的
     
       引用数据类型:类 数组  接口 枚举 注解
2.作用:
        说明:对代码进行说明,生成doc文档(API文档)
        检查:检查代码是否符合条件   @Override(会用) @FunctionalInterface 
        分析:对代码进行分析,起到了代替配置文件的作用(会用)
3.JDK中的注解:
        @Override  ->  检测此方法是否为重写方法
           jdk1.5版本,支持父类的方法重写
           jdk1.6版本,支持接口的方法重写
        @Deprecated -> 方法已经过时,不推荐使用
                       调用方法的时候,方法上会有横线,但是能用
        @SuppressWarnings->消除警告  @SuppressWarnings("all")    

2.注解的定义以及属性的定义格式

1.定义:
  public @interface 注解名{
      
  }

2.定义属性:增强注解的作用
  数据类型 属性名() -> 此属性没有默认值,需要在使用注解的时候为其赋值
  数据类型 属性名() default 值 -> 此属性有默认值,如果有需要,还可以二次赋值
    
3.注解中能定义什么类型的属性呢?
  a.8种基本类型
  b.String类型,class类型,枚举类型,注解类型
  c.以及以上类型的一维数组

public @interface Book {
    //书名
    String bookName();
    //作者
    String[] author();
    //价格
    int price();
    //数量
    int count() default 10;
}

3.注解的使用(重点)

1.注解的使用:
  说白了就是为注解中的属性赋值
2.使用位置上:
  在类上使用,方法上使用,成员变量上使用,局部变量上使用,参数位置使用等
3.使用格式:
  a.@注解名(属性名 = 值,属性名 = 值...)
  b.如果属性中有数组:
    @注解名(属性名 = {元素1,元素2...})

使用上面的Book注解:

@Book(bookName = "三体",author = {"刘慈欣"},price = 10,count = 20)
public class BookShelf {
}

注解注意事项:
      1.空注解可以直接使用->空注解就是注解中没有任何的属性
      2.不同的位置可以使用一样的注解,但是同样的位置不能使用一样的注解
      3.使用注解时,如果此注解中有属性,注解中的属性一定要赋值,如果有多个属性,用,隔开
        如果注解中的属性有数组,使用{}
      4.如果注解中的属性值有默认值,那么我们不必要写,也不用重新赋值,反之必须写上
      5.如果注解中只有一个属性,并且属性名叫value,那么使用注解的时候,属性名不用写,直接写值
        (包括单个类型,还包括数组)

4.注解解析的方法->AnnotatedElement接口

注解的解析:说白了就是将注解中的属性值获取出来 
1.注解解析涉及到的接口:AnnotatedElement接口
  实现类:  AccessibleObject, Class, Constructor, Executable, Field, Method, Package, Parameter 
2.解析思路:先判断指定位置上有没有使用指定的注解,如果有,获取指定的注解,获取注解中的属性值
  a. boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)->判断指定位置上有没有指定的注解
    比如:判断BookShelf上有没有Book注解
        Class bookShelf = BookShelf.class
        bookShelf.isAnnotationPresent(Book.class)     
  b. getAnnotation(Class<T> annotationClass) ->获取指定的注解,返回值类型为获取的注解类型
    比如:获取BookShelf上的Book注解
        Class bookShelf = BookShelf.class
        boolean result = bookShelf.isAnnotationPresent(Book.class) 
        如果result为true,证明BookShelf上有Book注解,那就获取
        Book book = bookShelf.getAnnotation(Book.class)   

5.元注解介绍

1.概述:元注解就是管理注解的注解
2.从哪些方面管理呢?
  a.控制注解的使用位置
    控制注解是否能在类上使用
    控制注解是否能在方法上使用
    控制注解是否能在构造上使用等
    
  b.控制注解的生命周期(加载位置)
    控制注解是否能在源码中出现
    控制注解是否能在class文件中出现
    控制注解是否能在内存中出现
    
3.怎么使用:
  a.@Target:控制注解的使用位置
     属性:ElementType[] value();
          ElementType是一个枚举,里面的成员可以类名直接调用
     ElementType中的成员:
         TYPE:控制注解能使用在类上
         FIELD:控制注解能使用在属性上
         METHOD:控制注解能使用在方法上
         PARAMETER:控制注解能使用在参数上
         CONSTRUCTOR:控制注解能使用在构造上
         LOCAL_VARIABLE:控制注解能使用在局部变量上 
             
  b.@Retention:控制注解的生命周期(加载位置)
    属性:RetentionPolicy value();
        RetentionPolicy是一个枚举,里面的成员可以类名直接调用
    RetentionPolicy中的成员:
        SOURCE:控制注解能在源码中出现 -> 默认
        CLASS:控制注解能在class文件中出现
        RUNTIME:控制注解能在内存中出现    

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
    //书名
    String bookName();
    //作者
    String[] author();
    //价格
    int price();
    //数量
    int count() default 10;
}
  • 42
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值