首页 / JAVA / Java注解(1)-注解基础
Java注解(1)-注解基础
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java注解(1)-注解基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2667字,纯文字阅读大概需要4分钟。
内容图文
![Java注解(1)-注解基础](/upload/InfoBanner/zyjiaocheng/1278/9017de0e12f4434483d2cdd854acdc07.jpg)
注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式。注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样。那么,注解到底可以做什么呢?
1、注解的作用。
- 提供用来完整地描述程序所需要的信息,如编译期校验程序信息。
- 生成描述符文件,或生成新类的定义。
- 减轻编写“样板”代码(配置文件)的负担,可以使用注解自动生成。
- 更加干净易读的代码。
- 编译期类型检查。
2、Java提供的注解
Java5内置了一些原生的注解,它们仅次于java.lang包下(不止于此):
- @Override,表示当前的方法定义将覆盖超类中的方法。
- @Deprecated,标识元素为弃用的,如果程序员使用了注解为它的元素,编译器会发出警告信息。
- @SuppressWarnings,关闭不当的编译器警告信息。
以上注解均为源码级别注解(即为RetentionPolicy.SOURCE标注,需要注意的是,虽然@Deprecated是由RetentionPolicy.CLASS标注,但是所起的作用主要还是在编译期),仅编译器可读取,编译成class将会舍弃,当然,运行时就更不会存在了。
Java还提供了一些元注解,用于自定义注解(meta-annotations),如@Target、@Retention、@SupportedSourceVersion等。java.lang.annotation包中的元注解:
@Retention 指定标识的注解如何保存。
-
RetentionPolicy.SOURCE
– 注解将仅保存在源代码级别,将会被编译器丢弃。 -
RetentionPolicy.CLASS
– 将会在编译时期使用,并保存在class中,但JVM不会识别此。 -
RetentionPolicy.RUNTIME
– 此注解将会被JVM识别,理论上将会在任意时期都会存在。
@Documented 表明该注解标识的元素所使用的注解应该出现在javadoc中。
@Target 指定哪种JAVA元素可以使用当前定义的注解,指定类型(ElementType)如下:
-
ElementType.ANNOTATION_TYPE
注释类型声明。 -
ElementType.CONSTRUCTOR
构造方法声明。 -
ElementType.FIELD
字段声明(包括枚举常量)。 -
ElementType.LOCAL_VARIABLE
局部变量声明。 -
ElementType.METHOD
方法声明。 -
ElementType.PACKAGE
包声明。 -
ElementType.PARAMETER
参数声明。 -
ElementType.TYPE
类、接口(包括注释类型)或枚举声明。
@Inherited 指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。
注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。
@Repeatable (Java8中增加)使用此注解注释的注解,在使用时是可重复使用的。注意,在Java8之前注解同一个注解在同一个元素上是不可以多次使用的。
3、定义注解
大多数时候,开发者需要自己定义注解以满足不同的需求。
定义注解,注解一般包括注解的定义、注解元素、元注解,示例如下:
package
com.zenfery.example.annotation;
import
java.lang.annotation.ElementType;
import
java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target;
@Target
(ElementType.TYPE)
@Retention
(RetentionPolicy.CLASS)
public
@interface
ClassInfo {
String value()
default
"default"
;
}
|
3.1、注解的定义
使用关键字@interface来定义,如上public @interface ClassInfo,注解的权限限定符仅支持public、default(包访问权限)。
3.2、元注解
如上@Target(ElementType.TYPE),表示注解ClassInfo可用于类、接口、或者枚举类型。
3.3、注解元素
注解元素使用类似普通方法的定义格式,如上述例子中的value(),使用default指定默认值。注解元素在使用时必须有值,要么是默认值,要么在使用注解是提供元素的值。且注解元素的值不能为null值。
注解元素的可用类型有:所有的基本类型、String、Class、enum、Annotation、以上类型的数组。如果使用复杂类型的注解,可使用注解的嵌套来实现。如果程序员的注解中定义了名为value的元素,并且在应用该注解的时候,如果该元素是唯一需要赋值的一个元素,那么此时无需使用名-值对的语法,而只需在括号内给出value元素所需的值即可。
3.4、注解不支持继承
不可使用extends关键字继承某个@interface。可以使用嵌套来实现相似的功能。
4、注解的使用
如果要使用以上的注解,可像如下这种方式使用:
package
com.zenfery.example.annotation.clazz;
import
com.zenfery.example.annotation.ClassInfo;
@ClassInfo
(
"这是HelloAnnotation类。"
)
public
class
HelloAnnotation {
}
|
转载请注明:子暃之路 ? Java注解(1)-注解基础
原文:http://www.cnblogs.com/haoerlv/p/7562470.html
内容总结
以上是互联网集市为您收集整理的Java注解(1)-注解基础全部内容,希望文章能够帮你解决Java注解(1)-注解基础所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。