日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA annotation入门

發布時間:2025/3/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA annotation入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近對spring源碼感興趣,今天看到annotation部分,略記之。 一. 最常見的annotation
  • @Override:用在方法之上,用來告訴別人這一個方法是改寫父類的
  • @Deprecated:建議別人不要使用舊的API的時候用的,編譯的時候會用產生警告信息,可以設定在程序里的所有的元素上.
  • @SuppressWarnings:暫時把一些警告信息消息關閉
  • @Entity:表示該類是可持久化的類
二. 設計一個自己的Annotation 先看代碼再講話 1. 只有一個參數的Annotation實現 [java] view plaincopyprint?
  • package?chb.test.annotation;??
  • 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?MyAnnotation1?{??
  • ????????String?value();??
  • }??
  • package chb.test.annotation; 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 MyAnnotation1 {String value(); }? 2. 有兩個參數的Annotation實現 [java] view plaincopyprint?
  • package?chb.test.annotation;??
  • 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.METHOD)??
  • @Retention(RetentionPolicy.RUNTIME)??
  • @Documented??
  • public?@interface?MyAnnotation2?{??
  • ????????String?description();??
  • ????????boolean?isAnnotation();??
  • }??
  • package chb.test.annotation; 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.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyAnnotation2 {String description();boolean isAnnotation(); }? 3. Annotation實驗類 [java] view plaincopyprint?
  • package?chb.test.annotation;??
  • @MyAnnotation1("this?is?annotation1")??
  • public?class?AnnotationDemo?{??
  • ????????@MyAnnotation2(description="this?is?annotation2",isAnnotation=true)??
  • ????????public?void?sayHello(){??
  • ????????????????System.out.println("hello?world!");??
  • ????????}??
  • }??
  • package chb.test.annotation; @MyAnnotation1("this is annotation1") public class AnnotationDemo {@MyAnnotation2(description="this is annotation2",isAnnotation=true)public void sayHello(){System.out.println("hello world!");} }? 4.Annotation測試說明類 [java] view plaincopyprint?
  • package?chb.test.annotation;??
  • import?java.lang.reflect.Method;??
  • import?org.junit.Test;??
  • public?class?TestAnnotation?{??
  • ????????@Test??
  • ????????public?void?test()?throws?ClassNotFoundException,?SecurityException,?NoSuchMethodException{??
  • ????????????????Class<?>?cls?=?Class.forName("chb.test.annotation.AnnotationDemo");??
  • ????????????????boolean?flag?=?cls.isAnnotationPresent(MyAnnotation1.class);??
  • ????????????????if(flag){??
  • ????????????????????????System.out.println("判斷類是annotation");??
  • ????????????????????????MyAnnotation1?annotation1?=?cls.getAnnotation(MyAnnotation1.class);??
  • ????????????????????????System.out.println(annotation1.value());??
  • ????????????????}??
  • ??????????????????
  • ????????????????Method?method?=?cls.getMethod("sayHello");??
  • ????????????????flag?=?method.isAnnotationPresent(MyAnnotation2.class)?;??
  • ????????????????if(flag){??
  • ????????????????????????System.out.println("判斷方法也是annotation");??
  • ????????????????????????MyAnnotation2?annotation2?=?method.getAnnotation(MyAnnotation2.class);??
  • ????????????????????????System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());??
  • ????????????????}??
  • ????????}??
  • ??????????
  • }??
  • package chb.test.annotation; import java.lang.reflect.Method; import org.junit.Test; public class TestAnnotation {@Testpublic void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException{Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);if(flag){System.out.println("判斷類是annotation");MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);System.out.println(annotation1.value());}Method method = cls.getMethod("sayHello");flag = method.isAnnotationPresent(MyAnnotation2.class) ;if(flag){System.out.println("判斷方法也是annotation");MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());}}}? 實驗結果,控制臺打出如下信息: 判斷類是annotation
    this is annotation1
    判斷方法也是annotation
    this is annotation2 ????true
    三.簡介及說明 1. MyAnnotation1中的@Target(ElementType.TYPE) @Target里面的ElementType是用來指定Annotation類型可以用在哪些元素上的.例如: TYPE(類型)、FIELD(屬性)、METHOD(方法)、PARAMETER(參數)、CONSTRUCTOR(構造函數)、LOCAL_VARIABLE(局部變量),、PACKAGE(包),其中的TYPE(類型)是指可以用在Class,Interface,Enum和Annotation類型上。 2. MyAnnotation1中的@Retention(RetentionPolicy.RUNTIME) RetentionPolicy 共有三種策略,分別為:
    • SOURCE:這個Annotation類型的信息只會保留在程序源碼里,源碼如果經過了編譯之后,Annotation的數據就會消失,并不會保留在編譯好的.class文件里面
    • CLASS:這個Annotation類型的信息保留在程序源碼里,同時也會保留在編譯好的.class文件里面,在執行的時候,并不會把這些信息加載到JVM中。注:默認策略為CLASS類型
    • RUNTIME:表示在源碼、編譯好的.class文件中保留信息,在執行的時候會把這一些信息加載到JVM中去的
    3. MyAnnotation1中的@Documented 目的就是將這一Annotation的信息顯示在JAVA API文檔上,如果沒有增加@Documented的話,JAVA API文檔上不會顯示相關annotation信息 4. MyAnnotation1中的@interface 關鍵字,表示該類為Annotation定義 5. MyAnnotation1中的 String value(); 表示有一個成員參數,名字為value,訪問權為默認(default)修飾符,注意以下兩點:
    • 訪問權只能用public和默認(default)修飾
    • 參數成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和String,Enum,Class,annotations等數據類型,以及這一些類型的數組
    6.AnnotationDemo中的@MyAnnotation1("this is annotation1") 因為MyAnnotation1只有一個參數,因此可以直接在括號中寫上value值。注:如果Annotation只有一個參數,則建議最好將該參數名稱定義為value 7.TestAnnotation中的cls.isAnnotationPresent(MyAnnotation1.class) 判斷該類是否使用了MyAnnotation1的注釋 8. TestAnnotation中的MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class) 返回該類針對MyAnnotation1的注釋 9. TestAnnotation中的method.isAnnotationPresent(MyAnnotation2.class) 判斷該方法是否使用了MyAnnotation2的注釋

    總結

    以上是生活随笔為你收集整理的JAVA annotation入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。