1.什么是Annotation
Ò
在已经发布的JDK1.5(tiger)中增加新的特色叫 Annotation。
Ò
2.
小例子
Annotation提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
Ò
package com.yd.test;
Ò
public class MyAnnotation {
Ò
@Override
Ò
public boolean equals(Object arg0) {
Ò
// TODO Auto-generated method stub
Ò
return super.equals(arg0);
Ò
}
Ò
3. 使用 Annotation的好處
3。代码分析
}
É
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.
@Retention
1.SOURCE //按照规定使用注释,但是并不将它保留到编译后的类文件中
2. CLASS //将注释保留在编译后的类文件中,但是在运行时忽略它
3. RUNTIME //将注释保留在编译后的类文件中,并在第一次加载类时读取它
在新Package中java.lang.annotation 中包含了以下meta-annotation:
@SuppressWarnings阻止编译器的警告,例:当类型不安全时
Ò
Java
定义了几个标准的
meta-annotation(
可以用
来解释
annotation
的
annotation)
Ò
@Retention
1.SOURCE //按照规定使用注释,但是并不将它保留到编译后的类文件中
2. CLASS //将注释保留在编译后的类文件中,但是在运行时忽略它
3. RUNTIME //将注释保留在编译后的类文件中,并在第一次加载类时读取它
@Target
1. annotation的target是一个被标注的程序元素。target说明了annotation所修饰的对象范围:annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标
Ò
Ò
Documented 表示注释应该出现在类的 Javadoc 中
Ò
@Inherited
Ò
一个Annotation将被继承
}
@Documented
Ò
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");
Ò
}
Ò
}