注解概述

我们可以把注解理解为一种代码级别的说明,功能性说明,是从JDK1.5之后引入的新特性,格式:@注解名称

对比注释,是给开发者看的,对代码没有任何影响,注解是给JVM看的,具有功能的代码。

  • 定义:也叫元数据,是一种具有代码级别的说明,它同接口、类、枚举是在同一层次上。它可以声明在类、方法、属性、包、局部变量、方法参数等上面,用来对这些元素进行说明,注释。
  • 本质:就是一个接口,改接口默认继承Annotation接口。

注解的作用

在目前的主流应用中主要是替代配置文件(如xml文件)

  • 在servlet2.5之前不支持注解开发,从Servlet3.0开始支持注解开发,不在需要到web.xml文件中去注册Servlet信息
  • 优点:开发效率高,代码精简度高
  • 缺点:代码偶合性太强,维护困难。

常见的内置注解(原生)

  • @Override:是在java.lang包中,告知编译器此方法是重写父类中的方法
  • @SuppressWarning:是在java.lang包中,告知编译器此内部内部有风险,抑制编译时的警告信息
  • @Deprecated:是在java.lang包中,告知编译器此方法是过时的,是不被鼓励的,可能有更好的方法替代了,被此注解标记的方法依然可以使用。
    • 此注解搭配参数、属性才可以使用
    • 参数/属性的名称是value,参数类型是String[]
      • unused:未使用
      • unchecked:未检查(强制类型转换时泛型的参数使用未指定),使用List、ArrayList等未进行参数化产生的警告
      • deprecation:过时警告
      • all:抑制所有

自定义注解

  • 使用关键字**@Interface**表示注解

  • 注解中含有抽象方法---->属性,属性的定义格式:修饰符 数据类型(属性名称);

    如果在定义属性时,给属性赋默认值 可以使用Default关键字,格式为:属性名称()default默认值;

    • 给注解提供更加详细的信息。
    • 注解就相当于接口,属性就相当于方方法

    注意事项

    • 修饰符只能是public abstract和接口命名要求是一样的 不写会默认添加

    • 数据类型可以有一下:

        • 基本类型
        • String
        • 枚举类型 enum
        • 注解类型
        • Class类型
        • 以上类型的一维数组类型
    • 属性名字为value,并且注解的属性有且仅有一个属性时,在使用该注解时,可以省略value属性名

      但是如果注解当中有多个属性时,使用时需要显示的添加value属性名。

使用注解(重点)

  • 在类、方法、成员变量、局部变量、方法参数上面添加注解 格式:@注解名称(属性名1=属性名1,属性名2=属性名2)
@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

元注解

  • 作用用来负责注解其他注解。

    • 在java当中就定义了四个元注解meta-annotation类型,它们被用来提供对其他注解annotation进行注解说明

    • 这些类型和它们所支持的类都在java.lang.annotation包中可以找到。

    • Documented表明一个类型的注释被javadoc默认文件。
      Inherited表示一个注释类型是自动继承的。
      Native指示定义一个常量值的字段可以从本机代码中引用。
      Repeatable注释类型 java.lang.annotation.Repeatable用来指示注释类型的声明它(元)诠释的是重复的。
      Retention表示要保留带注释类型的注释的多长时间。
      Target指示注释类型适用的上下文。
    • @Target(重点) 强调注解修饰的范围,表示注解类型应该出现在什么位置。对哪一块的数据是有效的。------->类、方法、成员变量、局部变量、属性、方法参数使用

    • 注意:@Target(ElementType.ANNOTATION_TYPE)—>使用在注解上面

      • FIELD:字段上可以使用
      • METHOD:方法上可以使用
      • PARAMETER:参数上可以使用
      • TYOE:类、接口、枚举、注解上可以使用
      • CONSTRUCTOR:构造方法上面可以使用
      • LOCAL_VARIABLE:局部变量可以使用
      • TYPE_PARAMETER:表示注解可以用于类型参数声明时(1.8引入)
      • TYPE_USE:类型使用说明(1.8引入)
    • Retention(重点):代表注解的可见范围。表示需要在什么级别保存该注解信息 。用于描述注解的声明周期。

      借助于RetentionPolicy属性;总共有三个取值

      • SOURCE:源码级别可见

      • CLASS:在字节码文件级别可见,包括SOURCE级别

      • RUNTIME:在整个运行阶段可见,包括SOURCE和CLASS,可以通反射获取

        如果想要解析使用注解,那么需要把该注解的属性值设定为Runtime值。

        如:RetentionPolicy.RUNTIME

    • Documented:说明该注解将被包含在javadoc中,意思是生成帮助文档时对应位置上含住该注解信息

    • Repeatable:元注解@Repeatable是JDK1.8新引入的,他表示在同一个位置重复相同的注解。在没有该注解前,一般是无法在同一个类型上使用相同的注解,它的使用需要借助容器来存储此注解。

    • Class<? extends Annotation>向上限定   意思是说只能传递Annotation以及它的子类
      Class<? super Annotation>向下限定	意思是说只能传递Annotation以及它的父类
      
    • Inherited:表名子类是可以继承父类中的该注解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值