package AnnotationTest;
import java.util.ArrayList;
public class AnnotationTest {
//标住不能被代码执行,但是这种标住能够被编译器读取,也会被JAVA虚拟机读取
@override//表示一个方法重写超类中的另个方法的声明
//元标注:用来标注标注的标注。
@SuppressWarnings({"unchecked","",""})//表示忽略指定显示的警告,这样下面的 警告就没有了
public void m1()
{
ArrayList arr=new ArrayList();
arr.add("hello");
arr.add("haha");
arr.add("hehe");
}
//通过加个标住来给方法签名
//@Author("tangliang")
@Author(name="tangliang",date="2008-8-08")
public void m2()
{
}
}
package AnnotationTest;
//标住跟定义接口的方法很相似唯一的区别是interface前面有个@
import java.lang.annotation.*;//定义标注的标注的引用位置
@Documented //标记标注能够被文档化
@Inherited //指示可以被自动继承
@Retention(RetentionPolicy.RUNTIME)//CLASS,RUNTIME,SOURCE 3 种枚举类型
@Target({ElementType.TYPE,ElementType.METHOD})//标注标注能够标注的内容
public @interface Author {
//public String value();//如果只有一个值要调用名字只能叫value.
//多值标住
public String name();
public String date();
}
package AnnotationTest;
public class Student {
@Author(name="tangliang",date="2008-08-08")
public void m1(){
}
@Author(name="annna",date="2008-08-08")
public void m2(){
}
@Author(name="caikun",date="2008-08-08")
public void m3(){
}
@Author(name="feifei",date="2008-08-08")
public void m4(){
}
@Author(name="xiaotang",date="2008-08-08")
public void m5(){
}
@Author(name="feifei",date="2008-08-08")
public void m6(){
}
@Author(name="tangliang",date="2008-08-08")
public void m7(){
}
@Author(name="tangliang",date="2008-08-08")
public void m8(){
}
}
package AnnotationTest;
import java.lang.annotation.*;
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) {
Class c=null;
try {
c=Class.forName("AnnotationTest.Student");
Method[]ms=c.getDeclaredMethods();
for(int i=0;i<ms.length;i++)
{
Author ann=ms[i].getAnnotation(Author.class);
System.out.println(ms[i].getName()+":"+ann.name()+":"+ann.date());
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}