JDK 5.0 注释 示例

1. 利用注释和反射 实现程序的方法按顺序执行 
Java代码   收藏代码
  1.   Order.java  
  2. ----  
  3. import java.lang.annotation.*;  
  4. @Target({ElementType.METHOD})  
  5. @Retention(RetentionPolicy.RUNTIME)  
  6. public @interface Order {  
  7.    int value();  
  8. }  
  9. -----  
  10.  Tarena.java  
  11.    
  12. public class Tarena {  
  13.    @Order(1)  
  14.    public void studyUnix(){  
  15.       System.out.println("Unix");  
  16.    }  
  17.    @Order(8)  
  18.    public void studyEJB(){  
  19.       System.out.println("EJB");  
  20.    }  
  21.    @Order(2)  
  22.    public void studyCoreCpp(){  
  23.       System.out.println("C++");  
  24.    }  
  25.    @Order(3)  
  26.    public void studyUnixCpp(){  
  27.        System.out.println("Unix C++");  
  28.    }  
  29.    @Order(6)  
  30.    public void studyHibernate(){  
  31.       System.out.println("Hibernate");  
  32.    }  
  33.    @Order(5)  
  34.    public void studyJDBC(){  
  35.       System.out.println("JDBC");  
  36.    }  
  37.    @Order(7)  
  38.    public void studyJavaWeb(){  
  39.       System.out.println("Servlet JSP Struts");  
  40.    }  
  41.    @Order(4)  
  42.    public void studyCoreJava(){  
  43.       System.out.println("CoreJava");  
  44.    }  
  45. }  
  46.   
  47. ------  
  48.    
  49. RunByOrder.java  
  50.    
  51. import java.lang.reflect.*;  
  52. import java.util.*;  
  53. public class RunByOrder {  
  54.    public static void main(String[] args) throws Exception{  
  55.    Class c=Class.forName("Tarena");  
  56.    Object o=c.newInstance();  
  57.     
  58.    TreeMap tm=new TreeMap();  
  59.    Method[] ms=c.getMethods();  
  60.    for(Method m:ms){  
  61.       if (m.isAnnotationPresent(Order.class)){  
  62.       Order order=m.getAnnotation(Order.class);  
  63.       int value=order.value();  
  64.       tm.put(value,m);  
  65.     }  
  66.   }  
  67.     
  68.   Set s=tm.keySet();  
  69.   for(Integer i:s){  
  70.      Method m=tm.get(i);  
  71.      m.invoke(o);  
  72.   }  
  73.  }  
  74. }  

==================== 
2. 注释的属性的写法,与使用 
----------------- 
Java代码   收藏代码
  1. Test.java  
  2.    
  3. import java.lang.annotation.*;  
  4. @Target(value={ElementType.METHOD})  
  5. @Retention(RetentionPolicy.RUNTIME)  
  6. public @interface Test {  
  7.     String parameter() default "liucy";  
  8. }  
  9. /* 
  10.  *@interface A1{ 
  11.  * A2[] value(); 
  12.  *} 
  13.  *@interface A2{ 
  14.  * String[] value(); 
  15.  *} 
  16.  *@A1({@A2({"A","B"}),@A2({"C","D"})}) 
  17.  *public void m(){} 
  18.  * 
  19.  * 
  20.  * 
  21.  */  
  22.   
  23. -----------  
  24. MyClass.java  
  25.    
  26. public class MyClass {  
  27.  //要测 参数:"liucy"  
  28.    @Test  
  29.    public void m1(String s){  
  30.    System.out.println(s+" m1");  
  31.    }  
  32.    public void m2(String s){  
  33.    System.out.println(s+" m2");  
  34.    }  
  35.  //要测 参数:"tangliang"  
  36.    @Test(parameter="tangliang")  
  37.    public void m3(String s){  
  38.    System.out.println(s+" m3");  
  39.    }  
  40.    
  41. }  
  42. --------------  
  43. Test1.java  
  44.    
  45. public class Test1 {  
  46.    public static void main(String[] args) {  
  47.    MyClass mc=new MyClass();  
  48.    mc.m1("liucy");  
  49.    mc.m3("tangliang");  
  50.   }  
  51. }  


============== 

3. 利用注释及其属性来调用这个类中的方法 
-------------- 
Java代码   收藏代码
  1. TestEngin.java  
  2.    
  3. import java.lang.reflect.*;  
  4. public class TestEngine {  
  5.    public static void main(String[] args) throws Exception{  
  6.   //构造对象  
  7.    String className="MyClass2";  
  8.    Class c=Class.forName(className);  
  9.    Object o=c.newInstance();  
  10.   //获得方法对象  
  11.    Method[] ms=c.getMethods();  
  12.    for(Method m:ms){  
  13.    //判断Test注释在这个方法上是否存在  
  14.    if (m.isAnnotationPresent(Test.class)){  
  15.     //获得Test注释对象  
  16.    Test t=m.getAnnotation(Test.class);  
  17.     //获得Test注释的parameter属性  
  18.    String p=t.parameter();  
  19.     //调用这个方法  
  20.    m.invoke(o,p);  
  21.    }  
  22.   }  
  23.  }  
  24. }  
  25.   
  26. -------------  
  27. Test.java  
  28.    
  29. import java.lang.annotation.*;  
  30. @Target(value={ElementType.METHOD})  
  31. @Retention(RetentionPolicy.RUNTIME)  
  32. public @interface Test {  
  33.  String parameter() default "liucy";  
  34. }  
  35. /* 
  36.  *@interface A1{ 
  37.  * A2[] value(); 
  38.  *} 
  39.  *@interface A2{ 
  40.  * String[] value(); 
  41.  *} 
  42.  *@A1({@A2({"A","B"}),@A2({"C","D"})}) 
  43.  *public void m(){} 
  44.  * 
  45.  * 
  46.  * 
  47.  */  
  48.   
  49. ------------  
  50.    
  51. MyClass.java  
  52.    
  53. public class MyClass2 {  
  54.    @Test(parameter="Hiloo")  
  55.    public void p1(String s){  
  56.    System.out.println("p1 "+s);  
  57.    }  
  58.    @Test(parameter="Chenzq")  
  59.    public void p2(String s){  
  60.    System.out.println("p2 "+s) ;  
  61.    }  
  62.    
  63. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值