注解
- 注解也被称为元数据(MateDate),用于修饰或解释包,类,方法,属性,构造器,局部变量等数据信息
- 和注释一样,注解不会影响程序逻辑,但是注解可以被编译或者运行,相当于嵌入在代码中的补充信息
- 在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的注意细节
- @Override表示指定重写父类的方法(从编译层面验证),如果父类没有该方法,则报错
- 不写@Override,但是子类仍然构成重写,不影响
- @Override只能修饰方法,不能修饰其他
- 查看@Override注解源代码为@Target(ElementType.METHOD)说明只能修饰方法
- @Target是修饰注解的注解,称为元注解
@Deprecated的使用
@Deprecated可以修饰:方法,类,包,参数,属性等
来表示被修饰的元素已经过时了,不推荐使用,但是是可以使用的。
比如在2022年的IPone4s,IPone4s就可以使用@Deprecated修饰
被@Deprecated修饰的元素在被调用时,会有一根小线
案例演示:
可以看到这个线条让人感觉这个元素就很low,就是个细狗。
@Deprecated使用注意事项
- Deprecated用于修饰每个程序元素,表示它已过时,不建议使用
- 可以修饰,方法,类,属性,包等
- 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
允许子类继承父类的注解