标注是java语言出现的一个新特性,在实际应用中其可以部分或者全部替代传统的XML等部署描述文件。之所以要出现标注特性,是因为部署描述文件很复杂,在具体编写时很容易出错。
1.标注的简单使用:
标注在很早以前就应用于java程序的开发中,但是没有引起关注。直到作为规范在JDK5.0中发布以后,才逐渐被程序员了解,并有越来越多的框架、技术加入了标注应用。例如EJB3规范(java EE5规范的子集)为Bean类型、接口类型、资源引用、事物属性、安全性等定义了标注。JAX-WS2.0规范为Web服务提供了一组类似的标注。
标注其实就是一种标志,加上标注就等于打上了某种标记,没加就等于没有某种标记。当java语言的编译器、开发工具等其他程序在具体编译程序时,就会通过反射直到类或其他各种元素是否有标记,然后就会根据标记去实现相应功能。
2.JDK的内置标注:
在最新的JDK中,sun公司已经提供了几个内置的标记,它们分别是@Override、@Deprecated和@SuppressWarnings。
(1)@Override
java.lang.Overeide被用作标注方法,主要用于子类在覆盖父类的方法名时,检测方法名称。如果方法名称正确,则不会有任何提示,否则就会提示错误。
package com.ccniit.lg.Override; public class People { public String toString () { return "人的名字"; } }
package com.ccniit.lg.Override; public class Student extends People{ @Override public String toString1 () { return "学生的名字"; } }
当上面的代码没有@Override时,该段代码不会报错。但是如果有@Override标注时,就会报错。之所以会报错,当存在@Override时,编译器就会认为该方法为继承类,会从该类的父类中查找是否有与该方法相同的方法。
@Override标注其实就相当于修饰符,与public、void等修饰符一样,其不仅可以放在方法上面,还可以放在方法的左边。如下:
@Override public String toString1 () { return "学生的名字"; }
(2)@Deprecated
package com.ccniit.lg.Deprecated; public class People { @Deprecated public void sayHello () { System.out.println("Hello"); } public void sayHello1 () { System.out.println("Hello"); } }
package com.ccniit.lg.Deprecated; public class TestPeople { public static void main (String[] args) { People people = new People(); people.sayHello(); people.sayHello1(); } }
当一个类或者一个类成员使用@Deprecated修饰时,编译器将不鼓励使用这个被标注的程序元素。而且这种修饰具有一定的“延续性”:即在代码中通过继承或者覆盖的方式使用这个过时的类型或者成员,虽然继承或者覆盖后的类型及成员并不是声明为@Deprecated的,但是编译器还是会警告的。
(3)@SuppressWarnings
java.lang.SuppressWarnings被用作标注类、属性和方法等成员,主要用于屏蔽警告。该标记与前面两个标记的最大不同就是其带有参数,并且参数可以不止一个。参数的值为警告的类型,如“已经过时的警告”的类型为deprecation,“没有使用的警告”的类型为unused,“类型不安全的警告”的类型为unchecked。
package com.ccniit.lg.SimpleAnnotation; public class SimpleAnnotation { public static void main (String[] args) { System.runFinalizersOnExit (true); } }
当在命令行窗口中通过javac命令来编译上述java文件时,会出现如图所示内容:
即编译成功,但是却出现了注意的代码,如果想要查看源java文件中需要注意的地方,则可以输入-Xlint:deprecation命令参数。
如果有些程序员想要用过时的方法,但是又不想编译时出现的注意代码,就可以在代码中加入@SuppressWarnings标注,代码如下所示:
package com.ccniit.lg.SimpleAnnotation; public class SimpleAnnotation { @SuppressWarnings("deprecation") public static void main (String[] args) { System.runFinalizersOnExit (true); } }
上面代码中的@SuppressWarnings标注就是告诉java编译器不需要再提示“注意”,起到压缩警告的作用。
注意:当@SuppressWarnings的参数为多个值时,必须以数组方式为参数赋值。如:@SuppressWarnings({"deprecation","unchecked"})。