Java从JDK 5开始引入注解(annotation)。
注解使得Java源代码中不但可以包含功能性的实现代码,还可以添加元数据。
注解的功能类似于代码中的注释,所不同的是注解不是提供代码功能的说明,而是实现程序功能的重要组成部分。
Java注解已经在很多框架中得到了广泛的使用,用来简化程序中的配置。
下面先来看看java中常用的注解。
一、常用注解
① @Override注解
package java.lang;import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}
@Override注解表示子类要重写父类的对应方法。
如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。
顺便说一句:@override注解在JDK 5环境下只能用于对继承的类的方法的重写,实现接口中的方法不能用@override注解。但是JDK1.6可以。
② @Deprecated注解
package java.lang;import java.lang.annotation.*;@Documented@Retention(RetentionPolicy.RUNTIME)public @interface Deprecated {}
@Deprecated注解表示方法是不被建议使用的。
③ @SuppressWarnings注解
package java.lang;import java.lang.annotation.*;import java.lang.annotation.ElementType;import static java.lang.annotation.ElementType.*;@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})@Retention(RetentionPolicy.SOURCE)public @interface SuppressWarnings { String[] value();}
@SuppressWarnings注解表示抑制警告。
例如下面的代码,声明了2个未使用的变量,加上2个@SuppressWarnings来抑制警告。
@SuppressWarnings("unused")int a=10; @SuppressWarnings({ "rawtypes", "unused" })List list =new ArrayList();
上面给出了Java自带的几个常用的注解,下面先来了解下代码中出现的诸如@Target,@Retention,@Documented(这些也叫元注解)的意义。
二、元注解
① @Target
@Target 表示该注解用于什么地方,可取的值包括:
- ElemenetType.CONSTRUCTOR 构造器声明
- ElemenetType.FIELD 域声明(包括 enum 实例)
- ElemenetType.LOCAL_VARIABLE 局部变量声明
- ElemenetType.METHOD 方法声明
- ElemenetType.PACKAGE 包声明
- ElemenetType.PARAMETER 参数声明
- ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
- ElementType.ANNOTATION_TYPE 注解
② @Retention
@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
- RetentionPolicy.SOURCE 注解将被编译器丢弃
- RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
- RetentionPolicy.RUNTIME JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
③ @Documented
@Documented 将此注解包含在 javadoc 中
④ @Inherited
@Inherited 允许子类继承父类中的注解