对于Annotation,是Java5以来的新特性,JDK5引入了Metadata(元数据)。所谓元数据就是关于数据的数据。在编程语言上下文中,元数据是添加到程序元素如方法、字段、类和包上的额外信息。 Java中的Annotation就是一种元数据,它提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。一个Annotation对代码的执行没有什么影响。Annotations使用@annotation的形式应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
Annotation一般作为一种辅助途径,应用在软件框架或工具中,在这些工具类中根据不同的annontation注解信息采取不同的处理过程或改变相应程序元素(类、方法及成员变量等)的行为。在spring 、struts和hibernate中广泛使用了注释,因此有必要了解下java中的 Annotation。
Annotation的核心的工作原理就是借助一个操作类通过反射的方式提取Annotation信息,进行操作。由此可见反射机制在java中用途广泛。
系统内建的 Annotation
主要有三种:
@Override // 声明某一个方法是用于覆盖父类中的方法,如果不是,就会在编译时报错
@Deprecated //声明某一个方法 ,某一个类,不建议使用。已经过时。
@SuppressWarnings //压制一些警告,比如泛型uncheck ,方法unuse
下面请看关于这三种注释的demo
1、@Override
覆盖父类接口中未实现的抽象方法。
package com.iip; interface Demo{ String getInfo(); } class Child implements Demo{ @Override //覆盖父类中的方法 public String getInfo(){ return "child"; } } public class AnnotationDemo { public static void main(String[] args) { // TODO Auto-generated method stub Child d = new Child(); System.out.println(d.getInfo()); } }
2、@Deprecated
直接在上面代码中@Override下面加入一行@Deprecated
class Child implements Demo{ @Override @Deprecated public String getInfo(){ return "child"; } }
通过javac编译就会发现
提醒你使用了过时的API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
加入 -Xlint:deprecation 后再次编译
便提示了详细信息。
3、@SuppressWarnings
还是在上述代码中,在main函数上面加入@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation") public static void main(String[] args) { // TODO Auto-generated method stub Child d = new Child(); System.out.println(d.getInfo()); }
再次编译将不会出现警告
或者也可以这样写 @SuppressWarnings(value={"deprecation"})
value接收的是一个数组,你可以加入多个参数,比如@SuppressWarnings(value={"deprecation","unchecked"})
@SuppressWarnings需要加入参数,这些参数都是已经定义好的了,定义的参数有如下几个。
deprecation 使用了过时的类或方法时的警告
unuse 定义的方法没用使用的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型
fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path 在类路径、源文件路径等中有不存在的路径时的警告
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告
finally 任何 finally 子句不能正常完成时的警告
all 关于以上所有情况的警告
明天将会继续学习如何构造自定义的Annotation。