现在的位置: 首页 > 综合 > 正文

jdk 5.0注解知识快速进阶

2013年08月25日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭

今天我无意中,研究了一下Java注释的一些用法:

 

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)  (1)
@Target(ElementType.METHOD)            (2)
public @interface NeedTest{                 (3)
 boolean value() default false;              (4)
 
}

 

       java 新语法规定使用@interface 修饰符定义注释类型,如(3)所示,一个注解可以拥有多个成员,成员声明和接口方法声明类似,这里,我们仅定义了一个成员,如(4)所示。成员的声明有以下几点限制:

         *成员以无入参、无抛出异常的方式声明,如 boolean value(String str)、boolean value() throws Exception 等方式是非法的

         *可以通过default 为成员定义一个默认值,如String level() default "LOW_LEVEL" 、int high() default 2是合法的,当然也可以不指定默认值。

        *成员类型是受限制的,只能是基本数据类型及封装类、String 、Class、enums、注解类型,以及上述类型的数组类型。如FormService value()、List foo() 是非法的。

     在(1)和(2)处,我们所看到的注解是java预留的注解,称为元注解(Meta-Annotation),它们被java编译器使用,会对注解类的使用产生影响。@Retention(RetentionPolicy.RUNTIME)表示 NeedTest 这个注解可以再运行期被 JVM读取,注解的保留期限类型在java.lang.annotation.Retenton类中定义,介绍如下:

        * SOURCE:注解信息仅保留在目标类代码的源文件中,但对应的字节码文件将不再保留。

        * CLASS   :注解信息将进入目标类代码的字节码文件中,但类加载器加载字节码文件时将注解加载到JVM中,也即运行期不能获取注解信息。

        * RUNTIME : 注解信息在目标类加载到JVM后依然保留,在运行期间可以通过反射机制读取类中注解信息。

 

抱歉!评论已关闭.