注解(Annotation)

注解

  1. 注解也被称为元数据(MateDate),用于修饰或解释包,类,方法,属性,构造器,局部变量等数据信息
  2. 和注释一样,注解不会影响程序逻辑,但是注解可以被编译或者运行,相当于嵌入在代码中的补充信息
  3. 在JavaSE中,注解的目的比较简单,例如标记重写方法,标记过时的功能,忽略警告等,JavaEE企业级开发中有比较重要的位置,

注解使用介绍

使用Annotation注解时,需要在前面加上@符号,且把注解当成一个修饰符使用。用于修饰它支持的程序元素

三个基本Annotation注解

  • @Override:限定某个方法,是重写了父类的方法,该注解只能用于方法
  • @Deprecated:用于表示某个程序元素(类,方法等),表示已过时了,不建议使用
  • @SuppressWarnings:抑制编译器警告,忽略某些警告

@Override的使用

当子类重写了父类的每个方法时,可以使用@Override进行修饰。
如果不使用,也不会影响重写。
但是如果使用了,编译器会检查一下是否真的重写了。如果该方法没有重写父类的方法,则会报错

案例演示:

public class Father {
    public void fly(){}
}
class Son extends Father{
    @Override
    public void fly(){}
    //如果使用了@Override修饰,但是该方法又没有重写父类的方法,就会报错
    @Override
   // public void soor(){}
}

如果查看@Override的定义会发现是@interface,但是这里不是表示接口,而是一个注解类

使用@Override的注意细节

  1. @Override表示指定重写父类的方法(从编译层面验证),如果父类没有该方法,则报错
  2. 不写@Override,但是子类仍然构成重写,不影响
  3. @Override只能修饰方法,不能修饰其他
  4. 查看@Override注解源代码为@Target(ElementType.METHOD)说明只能修饰方法
  5. @Target是修饰注解的注解,称为元注解

@Deprecated的使用

@Deprecated可以修饰:方法,类,包,参数,属性等
来表示被修饰的元素已经过时了,不推荐使用,但是是可以使用的。
比如在2022年的IPone4s,IPone4s就可以使用@Deprecated修饰

被@Deprecated修饰的元素在被调用时,会有一根小线

案例演示:
在这里插入图片描述
可以看到这个线条让人感觉这个元素就很low,就是个细狗。

@Deprecated使用注意事项

  1. Deprecated用于修饰每个程序元素,表示它已过时,不建议使用
  2. 可以修饰,方法,类,属性,包等
  3. Deprecated一般用在新老版本的过渡和兼容

@SuppressWarnings的使用

@SuppressWarnings可以修饰在,类,方法,属性等的上面
在写代码时,通常会碰到一些警告,比如下面的:
在这里插入图片描述
可能是每个类没有使用,或者是某个方法没有使用到,,,,等等的。就很烦
所以就可以使用@SuppressWarnings({“想要忽略警告的内容”}),
比如要忽略这个类中所有的警告就在这个类上面 @SuppressWarnings({“all”})
在这里插入图片描述
可以看到就没有黄色警告了。如果想要单独忽略某个方法的,就在这个方法上注解。

可能会用到的内容:
全部警告:@SuppressWarnings({“all”})
没有检查的警告:@SuppressWarnings({“unchecked”})
没有使用的警告:@SuppressWarnings({“unused”})

元注解(了解即可)

元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。它的作用和目的就是给其他普通的标签进行解释说明的。
比如说明 这个注解可以注解在哪些元素上面:类 方法 属性 等等。或者声明这个注解会被保留到哪个阶段等等
java中一般有4中元注解:
@Target 表示该注解用于什么地方
@Retention 表示在什么级别保存该注解信息
@Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档
@Inherited 允许子类继承父类中的注解

@Target

这个元注解表示:注解改注解可以用在什么元素上面:
具体可以使用在什么上可以看支持的枚举类对象
ElemenetType.CONSTRUCTOR-----------------------------构造器声明
ElemenetType.FIELD ----------------------------------域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE------------------------- 局部变量声明
ElemenetType.METHOD ---------------------------------方法声明
ElemenetType.PACKAGE --------------------------------包声明
ElemenetType.PARAMETER ------------------------------参数声明
ElemenetType.TYPE----------------------------------- 类,接口(包括注解类型)或enum枚举声明

@Retention

@Retention表示该注解可以保留到哪一个阶段,java文件有三个阶段:编译阶段 class文件 JVM运行阶段
具体支持到什么阶段可以看支持到哪一个枚举类对象:
RetentionPolicy.SOURCE-------------注解将被编译器丢弃
RetentionPolicy.CLASS -------------注解在class文件中可用,但会被JVM丢弃
RetentionPolicy.RUNTIME ---------JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息

@Documented

表示此注解会保存到javadoc中,在提取成文档的时候可以显示内容

@Inherited

允许子类继承父类的注解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值