注解的使用

Java知识点总结:想看的可以从这里进入

12、注解


12.1、介绍

Java5后加入了注解(Annotation)的概念,它是一种元数据,含有一些描述信息,可以把注解看成一个标签,它含有一些描述信息,用来指定一些规则约束和标准定义。说白了就是对一些类一些方法做一个说明,比如说在Spring框架中,类上加上@Controller注解就表示这个类是控制层的控制器,加上@Configuration就表示这个类是一个配置类。

把他当成一个标签更好理解一些,比方说我们在公司中有很多部门,你是后勤部门的就主要做后勤相关工作,你是开发部门的就去做项目开发,注解就是起到类似的功能。

注解可以像修饰符一样被使用, 可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明, 这些信息被保存在 Annotation 的 “name=value” 中。

其实注解也属于一种数据类型,用@interface 来定义。比如标注方法为

image-20220902172251530

注解在使用时就是通过@开头,如@Override(重写方法)等等,还有在文档注释中有很多注解来标注基本信息:

  1. @author 标明开发该类模块的作者,多个作者之间使用,分割
  2. @version 标明该类模块的版本
  3. @see 参考转向,也就是相关主题
  4. @since 从哪个版本开始增加的
  5. @param 对方法中某参数的说明,如果没有参数就不能写(@param 形参名 形参类型 形参说明)
  6. @return 对方法返回值的说明,如果方法的返回值类型是void就不能写(@return 返回值类型 返回值说明)
  7. @exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写其中(@exception 异常类型 异常说明)

在JavaSE中注解的使用比较简单,使用的也不多,但是未来的开发模式都是基于注解,尤其是开发过程中常用的各种框架基本都是基于注解来使用的。

12.2、基本注解

在Java SE 提供了 5 个基本注解:

  • @Override:指定方法重写的,只能修饰方法并且只能用于方法重写

  • @Deprecated:可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时,有两个属性

    • forRemoval:boolean类型,指定该 API 在将来是否会被删除。
    • since:String类型,指定该 API 从哪个版本被标记为过时。
  • @SuppressWarnings :可以取消一些编译器产生的警告,用在类上对所有方法起作用,用在方法上对单个方法起作用

    关键字用途
    all抑制所有警告
    boxing抑制装箱、拆箱操作时候的警告
    cast抑制映射相关的警告
    dep-ann抑制启用注释的警告
    deprecation抑制过期方法警告
    fallthrough抑制在 switch 中缺失 breaks 的警告
    finally抑制 finally 模块没有返回的警告
    hiding抑制相对于隐藏变量的局部变量的警告
    incomplete-switch忽略不完整的 switch 语句
    nls忽略非 nls 格式的字符
    null忽略对 null 的操作
    rawtypes使用 generics 时忽略没有指定相应的类型
    restriction抑制禁止使用劝阻或禁止引用的警告
    serial忽略在 serializable 类中没有声明 serialVersionUID 变量
    static-access抑制不正确的静态访问方式警告
    synthetic-access抑制子类没有按最优方法访问内部类的警告
    unchecked抑制没有进行类型检查操作的警告
    unqualified-field-access抑制没有权限访问的域的警告
    unused抑制没被使用过的代码的警告
  • @SafeVarargs:当static修饰的方法,使用泛型且可变参数未指明具体类型时,可用此注解消除编译器警告

  • @FunctionalInterface:指定某个接口必须是函数式接口,用于Lambda 表达式的接口

12.3、元注解

java中有6 个元注解,它们来自于 java.lang.annotation 包,元注解用在注解里的,它用来对注解进行一些修饰和配置,自定义注解时可以使用元注解进行设置。

  • @Documented:标记注解,用 @Documented 注解修饰的注解类会被 JavaDoc 工具提取成文档。
  • @Target({ElementType …….}):用来指定一个注解的使用范围
    • ElementType.CONSTRUCTOR:用于构造方法
    • ElementType.FIELD:用于成员变量
    • ElementType.LOCAL_VARIABLE:局部变量
    • ElementType.METHOD:方法
    • ElementType.PACKAGE:用于包
    • ElementType.TYPE:用于类、接口(包括注解类型)或 enum 声明
    • ElementType.PARAMETER:类型参数
  • @Retention:用于描述注解的生命周期
    • RetentionPolicy.SOURCE:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
    • RetentionPolicy.CLASS :注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
    • RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,在程序运行时可以获取到它们。
  • @Inherited:标记注解,一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
  • @Repeatable:JDK8增加,被其修饰过的注解,其注解的值可以同时取多个,注解可以同时写多个
  • @Native:JDK8增加,修饰成员变量,则表示这个变量可以被本地代码引用

12.4、自定义注解

我们也可以自定义注解,使用:权限修饰符 @interface 名字 来定义,它自动继承了java.lang.annotation.Annotation接口。

// 定义一个简单的注解类型,可以用在方法和类上
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation{
}

定义注解和定义类相似,注解前面的访问修饰符有两种,分别是公有访问权限(public)和默认访问权限(默认不写)。一个源程序文件中可以声明多个注解,但只能有一个是公有访问权限的注解。且源程序文件命名和公有访问权限的注解名一致。

注解中可以定义成员变量,成员变量以无参数方法的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型(配置参数)。其中不包含任何成员变量的注解称为标记注解。类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、以上所有类型的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值