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

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( 可以用 来解释 annotation annotation)
Ò

                                                     @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文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值