亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java 注解Annotation初解

2019-11-14 22:13:44
字體:
來源:轉載
供稿:網友
java 注解Annotation初解

Annotation在java的世界正鋪天蓋地展開,有空寫這一篇簡單的annotations的文章,算是關于Annotation入門的文章吧,希望能各位們能拋磚,共同學習...... 不講廢話了,實踐才是硬道理. 第一部分:了解一下java1.5起默認的三個annotation類型: 一個是@Override:只能用在方法之上的,用來告訴別人這一個方法是改寫父類的。 一個是@DePRecated:建議別人不要使用舊的API的時候用的,編譯的時候會用產生警告信息,可以設定在程序里的所有的元素上. 一個是@SuppressWarnings:這一個類型可以來暫時把一些警告信息消息關閉. 如果不清楚上面三個類型的具體用法,各位可以baidu或google一下的,很簡單的。 第二部分:講一下annotation的概念先,再來講一下怎樣設計自己的annotation. 首先在jdk自帶的java.lang.annotation包里,打開如下幾個源文件: 1、源文件Target.java

@Documented      @Retention(RetentionPolicy.RUNTIME)      @Target(ElementType.ANNOTATION_TYPE)      public @interface Target {         ElementType[] value();      }  

其中的@interface是一個關鍵字,在設計annotations的時候必須把一個類型定義為@interface,而不能用class或interface關鍵字(會不會覺得sun有點吝嗇,偏偏搞得與interface這么像). 2、源文件Retention.java

    @Documented      @Retention(RetentionPolicy.RUNTIME)      @Target(ElementType.ANNOTATION_TYPE)      public @interface Retention {         RetentionPolicy value();      }  

看到這里,大家可能都模糊了,都不知道在說什么,別急,往下看一下. 在上面的文件都用到了RetentionPolicy,ElementType這兩個字段,你可能就會猜到這是兩個java文件.的確,這兩個文件的源代碼如下: 3、源文件RetentionPolicy.java

 public enum RetentionPolicy {       SOURCE,       CLASS,       RUNTIME      }  

這是一個enum類型,共有三個值,分別是SOURCE,CLASS 和 RUNTIME. SOURCE代表的是這個Annotation類型的信息只會保留在程序源碼里,源碼如果經過了編譯之后,Annotation的數據就會消失,并不會保留在編譯好的.class文件里面。 ClASS的意思是這個Annotation類型的信息保留在程序源碼里,同時也會保留在編譯好的.class文件里面,在執行的時候,并不會把這一些信息加載到虛擬機(JVM)中去.注意一下,當你沒有設定一個Annotation類型的Retention值時,系統默認值是CLASS. 第三個,是RUNTIME,表示在源碼、編譯好的.class文件中保留信息,在執行的時候會把這一些信息加載到JVM中去的.  舉一個例子,如@Override里面的Retention設為SOURCE,編譯成功了就不要這一些檢查的信息;相反,@Deprecated里面的Retention設為RUNTIME,表示除了在編譯時會警告我們使用了哪個被Deprecated的方法,在執行的時候也可以查出該方法是否被Deprecated. 4、源文件ElementType.java

    public enum ElementType {       TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,       LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE      }  

@Target里面的ElementType是用來指定Annotation類型可以用在哪一些元素上的.說明一下:TYPE(類型), FIELD(屬性), METHOD(方法), PARAMETER(參數), CONSTRUCTOR(構造函數),LOCAL_VARIABLE(局部變量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(類型)是指可以用在Class,Interface,Enum和Annotation類型上. 另外,從1的源代碼可以看出,@Target自己也用了自己來聲明自己,只能用在ANNOTATION_TYPE之上. 如果一個Annotation類型沒有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,這里的元素指的是上面的八種類型. 舉幾個正確的例子:

   @Target(ElementType.METHOD)   @Target(value=ElementType.METHOD)   @Target(ElementType.METHOD,ElementType.CONSTRUCTOR)  

具體參考一下javadoc文檔 上面一下1和2的源文件,它們都使用了@Documented,@Documented的目的就是讓這一個Annotation類型的信息能夠顯示在javaAPI說明文檔上;沒有添加的話,使用javadoc生成API文檔的時候就會找不到這一個類型生成的信息. 另外一點,如果需要把Annotation的數據繼承給子類,那么就會用到@Inherited這一個Annotation類型. 第三部分:下面講的設計一個最簡單的Annotation例子,這一例子共用四個文件; 1、Description.java

    package lighter.VEvb.com;            import java.lang.annotation.Documented;      import java.lang.annotation.ElementType;      import java.lang.annotation.Retention;      import java.lang.annotation.RetentionPolicy;      import java.lang.annotation.Target;            @Target(ElementType.TYPE)      @Retention(RetentionPolicy.RUNTIME)      @Documented      public @interface Description {          String value();      }  

說明:所有的Annotation會自動繼承java.lang.annotation這一個接口,所以不能再去繼承別的類或是接口. 最重要的一點,Annotation類型里面的參數該怎么設定: 第一,只能用public或默認(default)這兩個訪問權修飾.例如,String value();這里把方法設為defaul默認類型. 第二,參數成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和String,Enum,Class,annotations等數據類型,以及這一些類型的數組.例如,String value();這里的參數成員就為String. 第三,如果只有一個參數成員,最好把參數名稱設為"value",后加小括號.例:上面的例子就只有一個參數成員. 2、Name.java

    package lighter.VEvb.com;            import java.lang.annotation.Documented;      import java.lang.annotation.ElementType;      import java.lang.annotation.Retention;      import java.lang.annotation.RetentionPolicy;      import java.lang.annotation.Target;             //注意這里的@Target與@Description里的不同,參數成員也不同      @Target(ElementType.METHOD)      @Retention(RetentionPolicy.RUNTIME)      @Documented      public @interface Name {          String originate();          String community();      }  

3、JavaEyer.java

    package lighter.VEvb.com;            @Description("javaeye,做最棒的軟件開發交流社區")      public class JavaEyer {          @Name(originate="創始人:robbin",community="javaEye")          public String getName()          {              return null;          }                    @Name(originate="創始人:江南白衣",community="springside")          public String getName2()          {              return "借用兩位的id一用,寫這一個例子,請見諒!";          }      }  

4、最后,寫一個可以運行提取JavaEyer信息的類TestAnnotation

     package lighter.VEvb.com;              import java.lang.reflect.Method;        import java.util.HashSet;        import java.util.Set;              public class TestAnnotation {          /**         * author lighter         * 說明:具體關天Annotation的API的用法請參見javaDoc文檔         */             public static void main(String[] args) throws Exception {             String  CLASS_NAME = "lighter.VEvb.com.JavaEyer";             Class  test = Class.forName(CLASS_NAME);             Method[] method = test.getMethods();             boolean flag = test.isAnnotationPresent(Description.class);              if(flag)              {                  Description des = (Description)test.getAnnotation(Description.class);                  System.out.println("描述:"+des.value());                  System.out.println("-----------------");              }                            //把JavaEyer這一類有利用到@Name的全部方法保存到Set中去              Set<Method> set = new HashSet<Method>();              for(int i=0;i<method.length;i++)              {                  boolean otherFlag = method[i].isAnnotationPresent(Name.class);                  if(otherFlag) set.add(method[i]);              }              for(Method m: set)              {                  Name name = m.getAnnotation(Name.class);                  System.out.println(name.originate());                  System.out.println("創建的社區:"+name.community());              }           }      }  

5、運行結果: 描述:javaeye,做最棒的軟件開發交流社區 ----------------- 創始人:robbin 創建的社區:javaEye 創始人:江南白衣 創建的社區:springside

另外,特在處聲明,如果轉載請注明出處:http://lighter.VEvb.com。

這篇是轉載別人的,:-D


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久999精品视频| 国产精品久久久久国产a级| 国产精品久久在线观看| 亚洲专区在线视频| 这里只有精品在线播放| 97国产suv精品一区二区62| 国产九九精品视频| 91丨九色丨国产在线| 国产精品第一页在线| 亚洲视频在线播放| 国产精品白嫩美女在线观看| 日韩视频第一页| 亚洲精品之草原avav久久| 亚洲成人精品视频| 国产视频一区在线| 成人欧美一区二区三区黑人孕妇| 国产精品精品久久久| 91精品视频在线看| 国产精品r级在线| 8x海外华人永久免费日韩内陆视频| 日本精品久久中文字幕佐佐木| 国产精品日本精品| 久久综合久久88| 国产国产精品人在线视| 国产精品igao视频| 欧美激情一区二区三区高清视频| 欧美国产高跟鞋裸体秀xxxhd| 国产日韩欧美在线| 国产精品爽爽爽爽爽爽在线观看| 亚洲国产婷婷香蕉久久久久久| 91精品在线国产| 国产91亚洲精品| 中文字幕日韩精品有码视频| 国产精品第一区| 日韩av在线资源| 91网站免费看| 欧美巨乳在线观看| 久久亚洲综合国产精品99麻豆精品福利| 69视频在线免费观看| 最新国产精品亚洲| 免费91麻豆精品国产自产在线观看| 久久99青青精品免费观看| 国产一区欧美二区三区| 久久视频免费观看| 国产成人精品国内自产拍免费看| 国产精品第3页| 亚洲一区av在线播放| 91精品国产91久久久久久不卡| 精品久久香蕉国产线看观看亚洲| 亚洲欧美日韩第一区| 日韩国产激情在线| 九九久久国产精品| 久久精品福利视频| 久久免费少妇高潮久久精品99| 国产精品成av人在线视午夜片| 欧美激情高清视频| 久久九九热免费视频| 国产精品com| 国产精品日韩一区| 欧美俄罗斯性视频| 欧美日韩一区二区在线| 欧美日韩一二三四五区| 26uuu日韩精品一区二区| 伊人一区二区三区久久精品| 亚洲理论在线a中文字幕| 神马国产精品影院av| 成人做爽爽免费视频| 92版电视剧仙鹤神针在线观看| 日本精品免费观看| 久久久999精品视频| 久久综合亚洲社区| 欧美韩日一区二区| 久久精品国产2020观看福利| 福利视频第一区| 91精品中国老女人| 日韩欧美在线视频观看| 668精品在线视频| 一本大道久久加勒比香蕉| 91高清视频在线免费观看| 亚洲码在线观看| 亚洲精品中文字| 欧美激情网站在线观看| 九九视频直播综合网| 亚洲第一网中文字幕| 欧美亚洲国产精品| 成人免费xxxxx在线观看| 国产精彩精品视频| 亚洲国模精品一区| 欧美日韩美女视频| 亚洲精品国产精品自产a区红杏吧| 亚洲国产91精品在线观看| 国产精品美女久久久久av超清| 久久影院资源站| 亚洲午夜av电影| 国产精品女人网站| 78m国产成人精品视频| 亚洲午夜久久久久久久| 欧美xxxx做受欧美| 色老头一区二区三区| 青草青草久热精品视频在线观看| 亚洲国产成人一区| 国产精品久久久久免费a∨| 97久久精品人搡人人玩| 中文字幕日韩综合av| 538国产精品视频一区二区| 久久综合免费视频| 亚洲国产欧美一区二区三区久久| 91精品国产成人www| 亚洲美女在线看| 色综合天天综合网国产成人网| 精品国偷自产在线| 福利一区福利二区微拍刺激| 91久久国产婷婷一区二区| 91理论片午午论夜理片久久| 亚洲人成电影网站| 久久精品91久久久久久再现| 欧美与欧洲交xxxx免费观看| 九九综合九九综合| 欧美日韩国产一区二区| 777精品视频| 成人精品久久一区二区三区| 国产欧美久久久久久| 91久久精品国产91性色| 蜜臀久久99精品久久久久久宅男| 国产欧美一区二区三区久久人妖| 尤物精品国产第一福利三区| 欧美激情一区二区三区在线视频观看| 2019中文字幕在线免费观看| 欧美激情视频网址| 91欧美精品成人综合在线观看| 中文字幕日韩在线播放| 91精品国产九九九久久久亚洲| 欧美日产国产成人免费图片| 久久99热精品| 亚洲偷熟乱区亚洲香蕉av| 亚洲天堂第二页| 美女久久久久久久久久久| 亚洲欧美日韩中文视频| 色偷偷亚洲男人天堂| 久久综合网hezyo| 日韩成人激情在线| 亚洲一区二区免费在线| 操91在线视频| 中文字幕精品视频| 欧美一级大片在线观看| 欧美特级www| 91精品免费看| 亚洲亚裔videos黑人hd| 97超碰蝌蚪网人人做人人爽| 色中色综合影院手机版在线观看| 欧美激情在线有限公司| 久久九九亚洲综合| 国产女人精品视频| 91视频-88av| 色天天综合狠狠色| 国产精品女人网站| 国模吧一区二区| 国产精品第8页| 宅男66日本亚洲欧美视频| 日韩欧美一区二区三区久久| 欧美日韩国产在线播放| 欧美与欧洲交xxxx免费观看| 97av在线视频免费播放| 国产综合色香蕉精品|