前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

注解

作者头像
端碗吹水
发布2020-09-23 10:38:16
3930
发布2020-09-23 10:38:16
举报

注解简介:

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、属性、方法、局部变量、方法参数等的前面。

注解主要是用来配置信息的,例如文档注释也是注解的一种,要注意的一点是注解并不是代码仅仅是配置信息,变动比较大的信息就需要作为配置信息,源码注解只会在代码上出现,编译后则不会出现。所以注解有一个缺点就是需要修改配置信息的时候,得找到那个类的的源码进行修改。

在没有注解的时候配置信息一般都是写在文本文件或者XML文件上,因为这种方式配置信息与代码分离了,所以需要查看的时候不太直观、方便,优点就是可以直接修改配置信息,不需要去找源码类。注解优点则是方便查看,能够与代码对应查看起来没那么费力,比较直观,所以一般大多数开发人员还是会选择使用注解。

Java自带注解:

1.@SuppressWarnings注解:

这个注解是用来去除代码警告的,是忽略性注解。写在方法上就去除方法的警告,写在构造器上就去除构造器的警告,写在类上去去除所有警告等等,这个注解可以写在属性、类、方法、参数、构造器、局部变量上。

没写@SuppressWarnings注解的话:

da75f65138227b88b4221291b92011b0.png
da75f65138227b88b4221291b92011b0.png

在方法上写@SuppressWarnings注解:

3fdf98f451cb322de88b33f9bbccf0fb.png
3fdf98f451cb322de88b33f9bbccf0fb.png

在类上写了这个注解的话会去除这个类里的所有警告:

070904c73d067cfb2a697034d9bc11d0.png
070904c73d067cfb2a697034d9bc11d0.png

2.@Deprecated注解:

这个注解大多数情况下是用来表示一个方法是过时方法的,一个方法上写了这个注解方法名就会显示一条横线,但是这个注解可以写在属性、类、方法、参数、构造器、包、局部变量上:

例如我写在方法上,这个方法就会显示一条横线:

38392caf04c42829c4805e663a059e7a.png
38392caf04c42829c4805e663a059e7a.png

3.@Override注解:

这个注解只能写在方法上,是用来表示这个方法是重写父类的:

b142a8ec191bfc5a843390a62f257314.png
b142a8ec191bfc5a843390a62f257314.png

以上就是几个常用的Java自带的注解。

创建注解类:

  在创建工程或类的菜单栏中有一个选项:Annotation,这个选项是用来创建注解类的:

f267a503557d847778872660ab9530b9.png
f267a503557d847778872660ab9530b9.png

元注解是用于声明注解类的一些特性的,例如这个注解能写在什么地方、在哪个区域有效等等,先介绍一下几个常用元注解的作用:

1.@Target用于声明注解能写在什么地方,这个注解里有几个参数:

ElementType.FIELD: 能写在属性上

ElementType.TYPE: 能写在类上

ElementType.CONSTRUCTOR: 能写在构造器上

ElementType.METHOD: 能写在方法上

ElementType.ANNOTATION_TYPE: 能写在注解上

ElementType.PARAMETER: 能写在参数上

ElementType.LOCAL_VARIABLE: 能写在局部变量中

2.@Retention用于声明注解的有效区域,这个注解里也有几个参数:

CLASS: 在字节码也就是Class文件中有效,但是一旦加载后就无效了

SOURCE: 只在源码中有效,字节码中没有

RUNTIME: 代码在运行时就有效

3.@Inherited用于声明此注解在子类中有效。

4.@Documented用于声明此注解在javadoc文档中奏效。

代码示例:

a902deb8d9f0cc8dc3b9b45f44bb5133.png
a902deb8d9f0cc8dc3b9b45f44bb5133.png

如果声明在注解类上的属性没有写默认值的话,在写这个注解时就会强制要求写一个值,不然就会报错,不想它报错就需要用default关键字写一个默认值上去:

82a4e470ca3ccd89a0db6d26b6d89a7a.png
82a4e470ca3ccd89a0db6d26b6d89a7a.png

使用反射机制对注解进行访问:

isAnnotationPresent方法可以判断属性、方法、构造器、类是否写有某个注解:

代码示例:

9ee6c39ac4980648c1f7b6f0415d7192.png
9ee6c39ac4980648c1f7b6f0415d7192.png

运行结果:

30c9657cc4609c1284c5afa959dcefb8.png
30c9657cc4609c1284c5afa959dcefb8.png

getAnnotations方法可以使用属性、方法、构造器、类的反射机制对象调用,得到所有的注解,返回的是Annotation数组对象:

代码示例:

e456cb3fe285f46d6581f0f2042cbac7.png
e456cb3fe285f46d6581f0f2042cbac7.png

运行结果:

51035a4f245443ab1c08271695b5ad92.png
51035a4f245443ab1c08271695b5ad92.png

getAnnotation方法可以获得指定的注解:

代码示例:

5e58323486a31c59c91a0e41f3c10e43.png
5e58323486a31c59c91a0e41f3c10e43.png

运行结果:

6b47f20d2a025eeab8a89564113ab884.png
6b47f20d2a025eeab8a89564113ab884.png

使用注解配置信息:

在注解里配置信息只需要根据注解类里申请的属性在括号里填写相对应的值即可,可以填写其中一个属性,也可以全部填写,如果没有默认值的属性则必须填写。

代码示例:

5a674606473bfec5c5b9c9cf892e55a7.png
5a674606473bfec5c5b9c9cf892e55a7.png
3289a3f3725188bbbd91fd8090e38c70.png
3289a3f3725188bbbd91fd8090e38c70.png

运行结果:

5695b26710ba11241f0bd8247189c917.png
5695b26710ba11241f0bd8247189c917.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档