自java5.0版本引入注解之后,它就成为了java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@override,@deprecated这样的注解。那么什么是注解?下面给大家介绍一下。
什么是注解?
注解也叫元数据,即一种描述数据的数据。注解是jdk1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。
注解有什么用?
官方解释:
注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。
1、提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
比如 @override提示子类要复写父类中被 修饰的方法
2、编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、html文档或者做其它相应处理。
3、运行时的处理: 某些注解可以在程序运行的时候接受代码的提取
注解主要针对的是编译器和其它工具软件;当开发者使用了annotation 修饰了类、方法、field 等成员之后,这些 annotation 不会自己生效,必须由开发者提供相应的代码来提取并处理 annotation 信息。这些处理提取和处理 annotation 的代码统称为 apt(annotation processing tool)。
注解可分为三类:
● 一类是java自带的标准注解,包括@override(标明重写某个方法)、@deprecated(标明某个类或方法过时)和@suppresswarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。
● 一类为元注解,元注解是用于定义注解的注解,包括@retention(标明注解被保留的阶段)、@target(标明注解使用的范围)、@inherited(标明注解可继承)、@documented(标明是否生成javadoc文档)、@repeatable。
● 一类为自定义注解,可以根据自己的需求定义注解
元注解
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。明白点说,就是我们定义注解时用的注解就是元注解。
@target(elementtype.method)@retention(retentionpolicy.runtime)public @interface test {}
除了@符号,注解很像是一个接口。定义注解的时候需要用到元注解。
在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@test就是一个标记注解。
注解的可用的类型包括以下几种:所有基本类型、string、class、enum、annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。
元注解一共有5种, @retention、@documented、@target、@inherited、@repeatable。
@retention
英文意为保留期的意思。当 @retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
@documented
这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 javadoc 中去
@target
目标的意思,@target 指定了注解运用的地方
@inherited
inherited 是继承的意思,但是它并不是说注解本身可以继承,而是说如果一个超类被 @inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解
@repeatable
repeatable 自然是可重复的意思。@repeatable 是 java 1.8 才加进来的,所以算是一个新的特性。
推荐学习:java视频教程
以上就是什么是java注解?的详细内容。