jialisoftw

          java自定義注解接口

          java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說(shuō)明、配置的功能。
          注解不會(huì)也不能影響代碼的實(shí)際邏輯,僅僅起到輔助性的作用。包含在 java.lang.annotation 包中。 
          1、元注解 
          元注解是指注解的注解。包括  @Retention @Target @Document @Inherited四種。 
          1.1、@Retention: 定義注解的保留策略 
          Java代碼
          1. @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節(jié)碼文件中不包含  
          2. @Retention(RetentionPolicy.CLASS)  //默認(rèn)的保留策略,注解會(huì)在class字節(jié)碼文件中存在,但運(yùn)行時(shí)無(wú)法獲得,  
          3. @Retention(RetentionPolicy.RUNTIME)//注解會(huì)在class字節(jié)碼文件中存在,在運(yùn)行時(shí)可以通過(guò)反射獲取到  
          1.2、@Target:定義注解的作用目標(biāo) 
          Java代碼
          1. @Target(ElementType.TYPE)   //接口、類(lèi)、枚舉、注解  
          2. @Target(ElementType.FIELD) //字段、枚舉的常量  
          3. @Target(ElementType.METHOD) //方法  
          4. @Target(ElementType.PARAMETER) //方法參數(shù)  
          5. @Target(ElementType.CONSTRUCTOR)  //構(gòu)造函數(shù)  
          6. @Target(ElementType.LOCAL_VARIABLE)//局部變量  
          7. @Target(ElementType.ANNOTATION_TYPE)//注解  
          8. @Target(ElementType.PACKAGE) ///包  
          elementType 可以有多個(gè),一個(gè)注解可以為類(lèi)的,方法的,字段的等等 
          1.3、@Document:說(shuō)明該注解將被包含在javadoc中 
          1.4、@Inherited:說(shuō)明子類(lèi)可以繼承父類(lèi)中的該注解 
          下面是自定義注解的一個(gè)例子 
          2、注解的自定義 
          Java代碼
          1. @Retention(RetentionPolicy.RUNTIME)  
          2. @Target(ElementType.METHOD)  
          3. public @interface HelloWorld {  
          4.     public String name() default "";  
          5. }  
          3、注解的使用,測(cè)試類(lèi) 
          Java代碼
          1. public class SayHello {  
          2.       
          3.     @HelloWorld(name = " 小明 ")  
          4.     public void sayHello(String name) {  
          5.         System.out.println(name + "say hello world!");  
          6.     }//www.heatpress123.net 
          7. }  
          4、解析注解 
             java的反射機(jī)制可以幫助,得到注解,代碼如下: 
          Java代碼 
          1. public class AnnTest {  
          2. public void parseMethod(Class<?> clazz) {  
          3.         Object obj;  
          4.        try {  
          5.             // 通過(guò)默認(rèn)構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象  
          6.             obj = clazz.getConstructor(new Class[] {}).newInstance(  
          7.                     new Object[] {});  
          8.             for (Method method : clazz.getDeclaredMethods()) {  
          9.                 HelloWorld say = method.getAnnotation(HelloWorld.class);  
          10.                 String name = "";  
          11.                 if (say != null) {  
          12.                     name = say.name();  
          13.                     System.out.println(name);  
          14.                     method.invoke(obj, name);  
          15.                 }  
          16.             }  
          17.         } catch (Exception e) {  
          18.             e.printStackTrace();  
          19.         }  
          20.     }  
          21.     public static void main(String[] args) {  
          22.         AnnTest t = new AnnTest();  
          23.         t.parseMethod(SayHello.class);  
          24.     }  
          25. }  
          26.  原文:http://www.software8.co/wzjs/java/1420.html

          posted on 2012-11-23 15:48 飛豬一號(hào) 閱讀(180) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 贵南县| 湖口县| 灯塔市| 东丽区| 南木林县| 黔西县| 仙桃市| 奇台县| 历史| 金湖县| 章丘市| 樟树市| 资兴市| 苍山县| 盐城市| 河间市| 福安市| 岢岚县| 嘉义县| 留坝县| 遂川县| 临漳县| 南木林县| 高要市| 北宁市| 南开区| 桃江县| 通化县| 镇安县| 分宜县| 西城区| 扬中市| 永川市| 吴旗县| 抚顺县| 三明市| 吴江市| 获嘉县| 通许县| 东台市| 逊克县|