http://www.iteye.com/topic/400085
java内置了三种注解,定义在java.lang包中
@Override
@Deprecated 不赞成的
@SuppressWarnings
/*
* 元注解@Target,@Retention,@Documented,@Inherited
*
* @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
* ElemenetType.PACKAGE 包声明
* ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
* ElemenetType.FIELD 域声明(包括 enum 实例)
* ElemenetType.METHOD 方法声明
* ElemenetType.CONSTRUCTOR 构造器声明
* ElemenetType.LOCAL_VARIABLE 局部变量声明
* ElemenetType.PARAMETER 参数声明
*
* @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
* RetentionPolicy.SOURCE 注解将被编译器丢弃
* RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃(默认)
* RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
*
* @Documented 将此注解包含在 javadoc 中
*
* @Inherited 允许子类继承父类中的注解
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
* 定义注解 Test
* 注解中含有两个元素 id 和 description
* description 元素 有默认值 "no description"
*/
public @interface Test {
public int id();
public String description() default "no description";
}
1)只能用public或默认(default)这两个访问权修饰.
2)参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.
3)如果只有一个参数成员,最好把参数名称设为"value",后加小括号.
public class Test_1 {
@Test(id = 1, description = "hello method_1") //应用注解
public void method_1() {
}
@Test(id = 2)
public void method_2() {
}
public static void main(String[] args) {
Method[] methods = Test_1.class.getDeclaredMethods(); //方法
for (Method method : methods) {
if (method.isAnnotationPresent(Test.class)) { //包含注解
Test annotation = method.getAnnotation(Test.class); //获取注解
System.out.println("Test( method = " + method.getName()
+ " , id = " + annotation.id() + " , description = "
+ annotation.description() + " )");
}
}
}
}