91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Java注解

發布時間:2021-10-14 10:33:43 來源:億速云 閱讀:135 作者:iii 欄目:web開發

本篇內容介紹了“如何理解Java注解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

由@Autowired引發對注解的思考

我們在編寫Spring應用時,會發現通過@Autowired來對成員變量、方法和構造函數進行標注進而實現自動裝配的工作,在IDE中點擊@Autowired  看其源碼會發現里面有更多以@開頭的東東,這就是我們今天講解的重點——Java注解!

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Autowired {     /**      * Declares whether the annotated dependency is required.      * <p>Defaults to {@code true}.      */     boolean required() default true; }

Java 注解詳解

Java 注解(Annotation)又稱 Java 標注,是 JDK5.0 引入的一種注釋機制。Annotation 是一個輔助類,它在  Junit、Struts、Spring 等工具框架中被廣泛使用。Java 語言中的類、方法、變量、參數和包等都可以被標注。和 Javadoc 不同,Java  標注可以通過反射獲取標注內容。在編譯器生成類文件時,標注可以被嵌入到字節碼中。Java 虛擬機可以保留標注內容,在運行時可以獲取到標注內容  。當然它也支持自定義Java 標注。

Java 定義了一套內置注解,包括:

@Override - 檢查該方法是否是重寫方法。如果發現其父類,或者是引用的接口中并沒有該方法時,會報編譯錯誤。

@Deprecated - 標記過時方法。如果使用該方法,會報編譯警告。

@SuppressWarnings - 指示編譯器去忽略注解中聲明的警告。

作用在其他注解的注解(或者說 元注解)是:

@Retention -  標識這個注解怎么保存,是只在代碼中,還是編入class文件中,或者是在運行時可以通過反射訪問。這3個生命周期分別對應于:Java源文件(.java文件)  ---> .class文件 ---> 內存中的字節碼。

1、RetentionPolicy.SOURCE:注解只保留在源文件,當Java文件編譯成class文件的時候,注解被遺棄;

2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加載class文件時候被遺棄,這是默認的生命周期;

3、RetentionPolicy.RUNTIME:注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在;

@Documented - 標記這些注解是否包含在用戶文檔中。

@Target - 標記這個注解的作用目標是哪種 Java 成員。

@Target(ElementType.TYPE)&mdash;&mdash;接口、類、枚舉、注解

@Target(ElementType.FIELD)&mdash;&mdash;字段、枚舉的常量

@Target(ElementType.METHOD)&mdash;&mdash;方法

@Target(ElementType.PARAMETER)&mdash;&mdash;方法參數

@Target(ElementType.CONSTRUCTOR) &mdash;&mdash;構造函數

@Target(ElementType.LOCAL_VARIABLE)&mdash;&mdash;局部變量

@Target(ElementType.ANNOTATION_TYPE)&mdash;&mdash;注解

@Target(ElementType.PACKAGE)&mdash;&mdash;包

@Inherited - 標記這個注解是繼承于哪個注解類(默認 注解并沒有繼承于任何子類)

從 Java 7 開始,額外添加了 3 個注解:

@SafeVarargs - Java 7 開始支持,忽略任何使用參數為泛型變量的方法或構造函數調用產生的警告。

@FunctionalInterface - Java 8 開始支持,標識一個匿名函數或函數式接口。

@Repeatable - Java 8 開始支持,標識某注解可以在同一個聲明上使用多次。

自定義注解開發

接下來,我們來學習如何進行自定義注解的開發。

使用@interface方式定義一個注解

import  java.lang.annotation.Retention; import  java.lang.annotation.Target; import  java.lang.annotation.ElementType; import  java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTag{   String name(); //注解中定義變量name }

寫一個類,在方法中應用@MyTag

public class TestTag {      @MyTag(name="case1")      public void login(){          System.out.println("login");      }      @MyTag(name="case2")      public void info(){          System.out.println("info");      }      @MyTag(name="case3")      public void logout(){          System.out.println("logout");      } }

寫一個測試類,獲取TestTag  類login方法中的@MyTag中的name值。前面我們說了很多注解如何定義,放在哪,現在我們可以開始學習注解屬性的提取了,這才是使用注解的關鍵,獲取屬性的值才是使用注解的目的。獲取注解屬性,  需要使用反射技術(我會在下面的文章中重點介紹反射),代碼如下:

public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException {         //裝載類并且對其進行實例化的操作。       Class tag = Class.forName("com.my.demo.TestTag");         //調用login方法(必須是public類型)        Method m=tag.getMethod("login");        //返回MyTag類型的注釋         MyTag name=m.getAnnotation(MyTag.class);          //輸出注釋的名稱         System.out.println("value is: "+name.name());      }

運行代碼,結果如下:

value is: case1

“如何理解Java注解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新和县| 嘉定区| 石景山区| 舟曲县| 长春市| 成安县| 新民市| 上虞市| 桃江县| 瑞金市| 综艺| 衡南县| 霍邱县| 留坝县| 兰考县| 化隆| 资源县| 专栏| 湖口县| 晋宁县| 北宁市| 青岛市| 南溪县| 乌鲁木齐县| 漠河县| 松溪县| 永修县| 泰兴市| 东宁县| 邢台县| 历史| 安龙县| 虞城县| 娄底市| 西乌珠穆沁旗| 夹江县| 漳州市| 定州市| 湖南省| 辽中县| 腾冲县|