java新特性(反射和注记)(续)

来源:互联网 发布:淘宝网店开店方案 编辑:程序博客网 时间:2024/05/18 13:27

1.什么是Annotation

Ò在已经发布的JDK1.5(tiger)中增加新的特色叫 Annotation
Ò
2. 小例子
Òpackage com.yd.test;
Òpublic class MyAnnotation {
Ò   @Override 
Ò   public boolean equals(Object arg0) {
Ò      // TODO Auto-generated method stub
Ò      return super.equals(arg0);
Ò   }
Ò
 
3. 使用 Annotation的好處
É1。文档化(也就是 javaDoc 產生的說明文件可將 metadata 包進去 )
É2。编译时检查
É
 
4.两种运行方式
同时,annotation运行存在两种方式:运行时、编译时
ß编译时annotation在原代码编译 的时候就起作用,告诉编译器一下信息,编译器根据这个作出一定的判断.java.lang包中有三个标准annotation是编译时注解: 前面使用过的
ß@Override   指明注释的方法覆盖超类的方法
ß@Deprecated 对不再使用的方法进行注释
ß
运行时annotation在程序运行的时候,可以通过反射机制来得到该对象的有关annotation的信息,并依此作出某些操作,这个主要供我们扩张
 
5.定义Annotation
 package com.yd.annotation;
Ò import java.lang.annotation.*;
Ò @Retention(RetentionPolicy.RUNTIME)
Ò @Target(ElementType.FIELD)
Ò  public @interface FirstAnnotation {
Ò    String value();
Ò
说明:
Ò@Retention(RetentionPolicy.RUNTIME)这个meta-annotation表示我们创建的FirstAnnotation这个Annotation将会存储在Class文件中,并在java VM运行时加载它。
Ò@Target(ElementType.FIELD)这个meta-annotation表示我们创建的FirstAnnotation将会为描述属性,而interface FirstAnnotation是我们自定义的Annotation,它有一个成员叫value,返回值是String
 }
 6.
ÒJava定义了几个标准的meta-annotation(可以用来解释annotationannotation)
Ò

                                                     @Retention
1.SOURCE    //按照规定使用注释,但是并不将它保留到编译后的类文件中
2. CLASS //将注释保留在编译后的类文件中,但是在运行时忽略它
3. RUNTIME //将注释保留在编译后的类文件中,并在第一次加载类时读取它

 @Target
Ò
 
Ò
Documented 表示注释应该出现在类的 Javadoc
Ò@Inherited
Ò一个Annotation将被继承 
Òpackage com.yd.annotation;
Òimport java.lang.annotation.*;
Ò@Retention(RetentionPolicy.RUNTIME)
Ò@Target(ElementType.METHOD)
Òpublic @interface RedLightAnnotation {
Ò
/*应用该注解的类*/ 
 在执行TestRedLightAnnotation 中间的方法的时候,我们可以读取到方法对应的注解信息,并且根据注解的内容来做一定的处理
Òpackage com.yd.classes;
Òimport com.yd.annotation.*;
Òpublic class TestRedLightAnnotation {
Ò   @RedLightAnnotation
Ò   public void donet(){
Ò      System.out.println(我们学习.net");
Ò   }
Ò   public void javaee(){
Ò       System.out.println("我们学习j2ee");
Ò   }
Ò}
}
@Documented
1. annotationtarget是一个被标注的程序元素。target说明了annotation所修饰的对象范:annotation可被用于packagestypes(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标 
在新Packagejava.lang.annotation 中包含了以下meta-annotation
@SuppressWarnings阻止编译器的警告,例:当类型不安全时
3。代码分析
}
Annotation提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
原创粉丝点击