java 注解
来源:互联网 发布:php无组件上传类 编辑:程序博客网 时间:2024/06/07 03:50
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述到底什么是注解,为什么要引入注解,注解是如何工作的,如何编写自定义的注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。这会花点儿时间,所以为自己准备一杯咖啡,让我们来进入注解的世界吧。
Java中的注解是如何工作的?
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述到底什么是注解,为什么要引入注解,注解是如何工作的,如何编写自定义的注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。这会花点儿时间,所以为自己准备一杯咖啡,让我们来进入注解的世界吧。
什么是注解?
用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码:
@Override
public
String toString() {
return
"This is String Representation of current object."
;
}
上面的代码中,我重写了toString()
方法并使用了@Override
注解。但是,即使我不使用@Override注解标记代码,程序也能够正常执行。那么,该注解表示什么?这么写有什么好处吗?事实上,
@Override告诉编译器这个方法是一个重写方法(描述方法的元数据),如果父类中不存在该方法,编译器便会报错,提示该方法没有重写父类中的方法。如果我不小心拼写错误,例如将toString()
写成了toStrring(){double r}
,而且我也没有使用@Override
注解,那程序依然能编译运行。但运行结果会和我期望的大不相同。现在我们了解了什么是注解,并且使用注解有助于阅读程序。
Annotation是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符。它是一种由JSR-175标准选择用来描述元数据的一种工具。
java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说,
反射的定义应该包含注解才合理一些。当然,这只是个人想法,至于java官方为什么这么泾渭分明不得而知,最重要的是如何使用注解。
注解的功能分为2部分:
作为特定的标记
额外信息的载体
>>>>定义一个UserAnnotation注解类
@Target(value = { ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public
@
interface
UserAnnotation {
public
int id()
default
0;
public
String name()
default
""
;
public
int age()
default
18;
public
String gender()
default
"M"
;
}
其中@target个@Retention本身就是注解
【@target】这个注解来指定给哪一类java成员注解,指定注解目标该是什么样的东西
注解@Target的源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
//这不是在作弊,这确实是自己注解自己,所以说注解也可以被字节给注解
public
@
interface
Target {
ElementType[] value();
//值可以使数组 value={...}
}
public
enum ElementType {
TYPE,
//给类(型)注解
FIELD,
//给字段注解,不要忘了,字段可以是对象
METHOD,
//给方法注解
PARAMETER,
//给参数注解
CONSTRUCTOR,
//给构造方法注解
LOCAL_VARIABLE,
//给局部变量注解
ANNOTATION_TYPE,
//给注解注解(这貌似把自己不当类来看)
PACKAGE,
//给包注解
TYPE_PARAMETER,
//不知道,等知道了我再写在这里
TYPE_USE
//这个也不知道
}
http://www.importnew.com/10294.html
http://my.oschina.net/ososchina/blog/345288
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
//这不是在作弊,这确实是自己注解自己,所以说注解也可以被字节给注解
public
@
interface
Target {
ElementType[] value();
//值可以使数组 value={...}
}
public
enum ElementType {
TYPE,
//给类(型)注解
FIELD,
//给字段注解,不要忘了,字段可以是对象
METHOD,
//给方法注解
PARAMETER,
//给参数注解
CONSTRUCTOR,
//给构造方法注解
LOCAL_VARIABLE,
//给局部变量注解
ANNOTATION_TYPE,
//给注解注解(这貌似把自己不当类来看)
PACKAGE,
//给包注解
TYPE_PARAMETER,
//不知道,等知道了我再写在这里
TYPE_USE
//这个也不知道
}
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- Android中获取手机屏幕各部分的尺寸
- 职责链模式
- 配置 TortoiseGit密钥
- 将C#程序与调用的dll对应的C++源码联调的一种方法
- 97.在字符串前加入n个*号
- java 注解
- 苹果自动打包不需配置证书仅登录开发者账号
- perl 网页编码转换
- Java、Json转换方式之二:Jackson
- [extjs5学习笔记]第三十八节 sencha CMD 6.0.0.220版本安装
- Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉
- 一行代码实现FMDB的CURD操作
- Java、Json转换方式之三:Fastjson
- Xilinx SDK使用教程