国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JAVA注解應用

2019-11-06 06:32:46
字體:
來源:轉載
供稿:網友
博客微博相冊收藏留言關于我
 

java注解應用實例 - Annotation, 自定義注解, 注解類規則

博客分類: javaJava 注解Annotationjava注解應用實例java反射 

本文介紹了java的自定義注解及注解類編寫的規則, 并通過實例來說明下如何使用java的注解. 實例演示了注解在類,構造方法,方法和字段的使用. 可以從這里下載到完成的工程代碼: http://dl.iteye.com/topics/download/f74972df-234f-30c9-aadd-ca2ed1376bc2

自定義注解類編寫的一些規則:

1. Annotation型定義為@interface, 所有的Annotation會自動繼承java.lang.Annotation這一接口,并且不能再去繼承別的類或是接口.

2. 參數成員只能用public或默認(default)這兩個訪問權修飾

3. 參數成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和String、Enum、Class、annotations等數據類型,以及這一些類型的數組.

4. 要獲取類方法和字段的注解信息,必須通過Java的反射技術來獲取 Annotation對象,因為你除此之外沒有別的獲取注解對象的方法

5. 注解也可以沒有定義成員, 不過這樣注解就沒啥用了

自定義注解類時, 可以指定目標 (類、方法、字段, 構造函數等) , 注解的生命周期(運行時,class文件或者源碼中有效), 是否將注解包含在javadoc中及是否允許子類繼承父類中的注解, 具體如下: 

1. @Target 表示該注解目標,可能的 ElemenetType 參數包括:

ElemenetType.CONSTRUCTOR 構造器聲明ElemenetType.FIELD 域聲明(包括 enum 實例) ElemenetType.LOCAL_VARIABLE 局部變量聲明 ElemenetType.METHOD 方法聲明 ElemenetType.PACKAGE 包聲明 ElemenetType.PARAMETER 參數聲明 ElemenetType.TYPE 類,接口(包括注解類型)或enum聲明

2. @Retention 表示該注解的生命周期,可選的 RetentionPolicy 參數包括

RetentionPolicy.SOURCE 注解將被編譯器丟棄 RetentionPolicy.CLASS 注解在class文件中可用,但會被VM丟棄 RetentionPolicy.RUNTIME VM將在運行期也保留注釋,因此可以通過反射機制讀取注解的信息

3. @Documented 指示將此注解包含在 javadoc 中

4.  @Inherited 指示允許子類繼承父類中的注解

好, 該介紹的介紹了, 看下自定義的注解應用實例:

1. 首先看下定義的注解類:

類注解定義, MyClassAnnotation.java:

[java] view plain copypackage  com.ross.annotation;  import  java.lang.annotation.*;  /**   * Author: Jiangtao He; Email: ross.jiangtao.he@Gmail.com   * Date: 2012-1-29   * Since: MyJavaExpert v1.0   * Description: class annotation   */   @Retention (RetentionPolicy.RUNTIME)   @Target (ElementType.TYPE)   public   @interface  MyClassAnnotation   {      String uri();      String desc();  }  默認構造方法注解定義,MyConstructorAnnotation.java: [java] view plain copypackage  com.ross.annotation;  import  java.lang.annotation.ElementType;  import  java.lang.annotation.Retention;  import  java.lang.annotation.RetentionPolicy;  import  java.lang.annotation.Target;  /**   * Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com   * Date: 2012-1-29   * Since: MyJavaExpert v1.0   * Description: Constructor annotation   */   @Retention (RetentionPolicy.RUNTIME)   @Target (ElementType.CONSTRUCTOR)   public   @interface  MyConstructorAnnotation   {      String uri();      String desc();  }  方法注解定義,MyMethodAnnotation.java:[java] view plain copypackage  com.ross.annotation;  import  java.lang.annotation.ElementType;  import  java.lang.annotation.Retention;  import  java.lang.annotation.RetentionPolicy;  import  java.lang.annotation.Target;  /**   * Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com   * Date: 2012-1-29   * Since: MyJavaExpert v1.0   * Description: method annotation   */   @Retention (RetentionPolicy.RUNTIME)   @Target (ElementType.METHOD)   public   @interface  MyMethodAnnotation   {      String uri();      String desc();  }  字段注解定義, MyFieldAnnotation.java:[java] view plain copypackage  com.ross.annotation;  import  java.lang.annotation.ElementType;  import  java.lang.annotation.Retention;  import  java.lang.annotation.RetentionPolicy;  import  java.lang.annotation.Target;  /**   * Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com   * Date: 2012-1-29   * Since: MyJavaExpert v1.0   * Description: field annotation   */   @Retention (RetentionPolicy.RUNTIME)   @Target (ElementType.FIELD)   public   @interface  MyFieldAnnotation   {      String uri();      String desc();  }  2. 再看下我們注解的應用和測試:

在類上面使用了MyClassAnnotation注解, 默認構造方法上使用了MyConstructorAnnotation注解,  自定義方法上使用了MyMethodAnnotation注解, 自定義字段上使用了MyFieldAnnotation注解, 在Mail函數中則實現了訪問這些注解,并打印注解信息.

MySample.java:

[java] view plain copypackage  com.ross.annotation;  import  java.lang.reflect.*;  /**   * Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com   * Date: 2012-1-29   * Since: MyJavaExpert v1.0   * Description: This class is used to show how to use the annotation of each level   */   @MyClassAnnotation (uri =  "com.ross.MySample" , desc =  "The class name" )  public   class  MySample  {      @MyFieldAnnotation (uri =  "com.ross.MySample#id" , desc =  "The class field" )      public  String id;        /**       * Description: default constructor       */       @MyConstructorAnnotation (uri =  "com.ross.MySample#MySample" , desc =  "The default constuctor" )      public  MySample()      {      }        /**       * Description: normal method       */       @MyMethodAnnotation (uri =  "com.ross.MySample#setId" , desc =  "The class method")      public   void  setId(String id)      {          this .id = id;      }        /**       * Description: MyAnnotation test       * @throws NoSuchMethodException        * @throws SecurityException        * @throws NoSuchFieldException        */       public   static   void  main(String[] args)  throws  SecurityException,              NoSuchMethodException, NoSuchFieldException      {          MySample oMySample = new  MySample();          // get class annotation           MyClassAnnotation oMyAnnotation = MySample.class                   .getAnnotation(MyClassAnnotation.class );          System.out.

控制臺打印結果:

[plain] view plain copyClass's uri: com.ross.MySample; desc: The class name  Constructor's uri: com.ross.MySample#MySample; desc: The default constuctor  Method's uri: com.ross.MySample#setId; desc: The class method  Field's uri: com.ross.MySample#id; desc: The class field  

至此本實例就完成了, 其實就是抓住兩點一個是定義注解類,另外一個是如何訪問注解, 就算是學會了.

注: 轉載請注明出處: http://hejiangtao.iteye.com ,  用于商業得給我分成大笑

MyJavaExpert_V1.0-java注解應用實例.rar (10.1 KB)下載次數: 2404 頂3 踩分享到:  Java Compiler 應用實例 | Java 序列化的高級認識--序列化反序列化, ...2012-01-29 21:35瀏覽 18605評論(1)分類:編程語言相關推薦
參考知識庫
人工智能知識庫10736  關注 | 521  收錄Python知識庫20226  關注 | 1334  收錄Java SE知識庫23461  關注 | 468  收錄微信開發知識庫19036  關注 | 776  收錄
評論
1 樓 beiyeren 2013-03-02  寫的不錯啊
發表評論

 您還沒有登錄,請您登錄后再發表評論

hejiangtao瀏覽: 75596 次性別: Icon_minigender_1來自: 杭州
最近訪客 更多訪客>>
wtxczwtxczsnowrainbow東林碣石hello2017
文章分類
全部博客 (13)java (12)網絡 (1)網絡編程 (1)
社區版塊
我的資訊 (0)我的論壇 (0)我的問答 (0)
存檔分類
2012-10 (2)2012-03 (1)2012-02 (1)更多存檔...
最新評論
硯臺觀月: 你好,例子還有嗎,我想要份學習看下。提供的鏈接找不到了。java網絡編程之Http多線程下載應用實例xianghanscce: ...java泛型應用實例 - 自定義泛型類,方法yhx1231: ...Java反射應用實例beiyeren: 寫的不錯啊java注解應用實例 - Annotation, 自定義注解, 注解類規則xuanxuan.good: 請問你是如何測試的.謝謝java反射的性能問題 (轉)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三明市| 池州市| 和平县| 福安市| 河津市| 兴隆县| 古丈县| 宁阳县| 平南县| 儋州市| 琼结县| 洛川县| 正安县| 淅川县| 松江区| 高平市| 嘉禾县| 光泽县| 会理县| 清苑县| 安乡县| 郯城县| 鹿邑县| 芦山县| 台湾省| 阳春市| 常山县| 清远市| 黄冈市| 大埔县| 揭西县| 松阳县| 宜宾县| 凤城市| 内丘县| 潮州市| 厦门市| 买车| 房产| 曲水县| 三穗县|