JDK自带注解的个人总结

Why is Annotation?
什么是注解?注解(Annotation)也叫做元数据,是一种代码级别的说明。它是JDK1.5以后版本引入的一个特性,它可以声明在类/方法/参数/变量/包等前面,用来对这些元素进行说明,注释。

注解的分类
1.按照运行机制
1.1 源码注解:注解只在源码中存在,编译成class文件就不存在了
1.2 编译时注解:注解在源码和class文件中都会存在,例如JDK自带注解
1.3 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
2.按照来源
2.1 来自JDK自带注解
2.2 来自第三方的注解:例如spring/mybatis框架
2.3 自定义注解

我今天主要总结的是JDK自带的注解,总共有三个:
@Override @Deprecation @SuppviseWarnings

1. @Override注解的作用
@Override 重写,这个注解只能作用在方法上,被标识子类重写父类的方法,用这个注解主要是可以避免子类重写父类方法的时候方法名跟参数写错
JDK自带注解的个人总结_第1张图片
这个是@Override 注解源码,导入的是java.lang.annotation包,它有两个注解,@Target表示的是该注解的作用域,该注解的作用域是ElementType.METHOD:表示作用在方法上;另外一个注解@Retention也是java自带的注解:
JDK自带注解的个人总结_第2张图片
可以看到@Retention也是作用在注解上的。@Documented可以把这个注解包含在javadoc中,他代表这个注解会被javadoc工具提取成doc文档。
JDK自带注解的个人总结_第3张图片

可以看到源码@Retention里面有三个枚举类型:
RetentionPolicy.SOURCE:它将会被限定在Java源文件中,那么这个注解既不会参与编译也不会在运行期起任何作用,这个注解就和注释是一样的效果,只能被阅读Java文件的人看到

RetentionPolicy.CLASS :它将被编译到Class文件中,那么编译器可以在编译时根据注解做一些处理动作,但是运行时JVM(Java虚拟机)会忽略它,我们在运行期也不能读取到;在默认的情况下,自定义注解是使用的RetentionPolicy.CLASS

RetentionPolicy.RUNTIME:这个注解可以在运行期的加载阶段被加载到Class对象中。那么在程序运行阶段,我们可以通过反射得到这个注解,并通过判断是否有这个注解或这个注解中属性的值,从而执行不同的程序代码段。我们实际开发中的自定义注解几乎都是使用的RetentionPolicy.RUNTIME;

然后我们在回过头来看@Override,它里面的源码注解就表示,在生成class文件的时候后是被编译器所忽略的,仅作为一个标识性注解。

2. @Deprecated注解的作用

@Deprecated 意思是说此方法已过时,过时的原因就是有新的API的类替代了次方法。这个被划去的方法仍然是可以正常使用的,就是一个提示而已。
JDK自带注解的个人总结_第4张图片
在图片中可以看到,调用的方法上面已经出现了一个下划线,这就是标识这个方法已经过时,但是这是一个提示你的注解,在编译时对代码并没有影响。

3. @SuppressWarnings注解的作用

@SuppressWarnings 这个注解的作用是给编译器一个指令,让它忽略该注解所标注的代码内部的一些警告,让我们不会再看到这些警告。它实际上提高了我们代码的安全性,因为它将防止我们对警告无动于衷 。

如下:在编译的时候我们总会发现定义但是未使用的变量会出现如下警告:
JDK自带注解的个人总结_第5张图片

上述代码编译通过是可以运行的,但是每行代码前面黄色的感叹号会影响我们判断该行是否设置断点,这时候我们可以在方法前面增加:@SuppressWarnings(“unused”) 去除这些“感叹号”。

JDK自带注解的个人总结_第6张图片
@SuppressWarnings 源码如下:
JDK自带注解的个人总结_第7张图片
查看源码中的@Target 注解得知, @SuppressWarnings的注解目标为类、字段、函数、函数入参、构造函数和函数的局部变量。

对于@SuppressWarnings的应用做了一下整理:
使用:

@SuppressWarnings(“”)
例如:@SuppressWarnings(“unchecked”) ,抑制单类型的警告
@SuppressWarnings({})
例如:@SuppressWarnings(value={“unchecked”,“rawtypes”}) ,抑制多类型的警告
@SuppressWarnings(value={})
例如:@SuppressWarnings(“all”) ,抑制所有类型的警告

以下是我对 @SuppressWarnings注解一些参数的总结:

JDK自带注解的个人总结_第8张图片

你可能感兴趣的:(基础篇,java)