1. 程式人生 > >什麼是Java 註解?綠帽子瞭解一下

什麼是Java 註解?綠帽子瞭解一下

什麼是Java註解?這個問題打自從第一天接觸到Java註解以來,也是一直困擾著我。什麼是註解?註解能做什麼?

註解在生活中的理解

通過生活中的例子舉例,來讓大家對註解這個詞能夠更加深刻的記住它。下面兩個例子比較貼切的說明下註解

  1. 例子一:標籤
    在超市裡面,你會在貨架上多多少少的看到有標籤的痕跡,有的貨架上貼著:糧油、洗髮水、水果、大米等等。這些標籤就是註解,在不影響貨物的同時,能讓顧客更好的找到商品,有的標籤如:國慶優惠三天、元旦2折起這些標籤說明了某類商品的生命週期。這算是註解的一個比較接近生活中貼切的例子了。
  2. 例子二:綠帽子
    舉綠帽子這個事,是為了讓大家更印象深刻的理解註解
    。例如生活中,你發現每個人頭上都頂了一頂帽子,五花八門、層出不窮。有的頂藍色的、有的頂紫色的、有的頂黃色的、有的頂綠色的。自從多了一頂帽子,你可能更容易從人群中識別出他是誰?帽子有一定的標誌性

可能上面兩個例子舉得並不是很貼切,小白初學,請大神輕噴。不過註解怎麼來的,就好比你為什麼叫這個名字一樣。在Java中註解就是:Annotation 也叫元資料

正式瞭解Java註解

定義:註解(Annotation),也叫元資料。一種程式碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、介面、列舉是在同一個層次。它可以宣告在包、類、欄位、方法、區域性變數、方法引數等的前面,用來對這些元素進行說明,註釋。

作用分類:

①編寫文件:通過程式碼裡標識的元資料生成文件【生成文件doc文件】
② 程式碼分析:通過程式碼裡標識的元資料對程式碼進行分析【使用反射】
③編譯檢查:通過程式碼裡標識的元資料讓編譯器能夠實現基本的編譯檢查【Override】

java註解的編寫格式: interface 前加一個**@**就是註解了,如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

Java 元註解

在jdk1.5的時候,提供了四種元註解,在java.lang.annotation

包中,用來註解其他的註解

@Documented –註解是否將包含在JavaDoc中
@Retention –什麼時候使用該註解
@Target? –註解用於什麼地方
@Inherited – 是否允許子類繼承該註解
@Documented–一個簡單的Annotations標記註解,表示是否將註解資訊新增在java文件中。
@Retention– 定義該註解的生命週期。
RetentionPolicy.SOURCE – 在編譯階段丟棄。這些註解在編譯結束之後就不再有任何意義,所以它們不會寫入位元組碼。
@Override, @SuppressWarnings都屬於這類註解。

RetentionPolicy.CLASS – 在類載入的時候丟棄。在位元組碼檔案的處理中有用。註解預設使用這種方式。

RetentionPolicy.RUNTIME– 始終不會丟棄,執行期也保留該註解,因此可以使用反射機制讀取該註解的資訊。
我們自定義的註解通常使用這種方式。
@Target – 表示該註解用於什麼地方。如果不明確指出,該註解可以放在任何地方。以下是一些可用的引數。需要說明的是:屬性的註解是相容的,如果你想給7個屬性都添加註解,僅僅排除一個屬性,那麼你需要在定義target包含所有的屬性。
public enum ElementType {
    /**標明該註解可以用於類、介面(包括註解型別)或enum宣告*/
    TYPE,

    /** 標明該註解可以用於欄位(域)宣告,包括enum例項 */
    FIELD,

    /** 標明該註解可以用於方法宣告 */
    METHOD,

    /** 標明該註解可以用於引數宣告 */
    PARAMETER,

    /** 標明註解可以用於建構函式宣告 */
    CONSTRUCTOR,

    /** 標明註解可以用於區域性變數宣告 */
    LOCAL_VARIABLE,

    /** 標明註解可以用於註解宣告(應用於另一個註解上)*/
    ANNOTATION_TYPE,

    /** 標明註解可以用於包宣告 */
    PACKAGE,

    /**
     * 標明註解可以用於型別引數宣告(1.8新加入)
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * 型別使用宣告(1.8新加入)
     * @since 1.8
     */
    TYPE_USE
}

@Inherited – 定義該註釋和子類的關係

註解支援的資料型別

關於註解支援的元素資料型別除了上述的String,還支援如下資料型別

所有基本型別(int,float,boolean,byte,double,char,long,short)

String

Class

enum

Annotation

上述型別的陣列

部分引用:
https://blog.csdn.net/javazejian/article/details/71860633
https://baike.baidu.com/item/Java 註解/4404368?fr=aladdin
http://www.importnew.com/10294.html


個人網站:http://xudailong.cc

關注「蛇崽網盤教程資源」公眾號 ,在微信後臺回覆「領取資源」,獲取IT資源200G乾貨大全。

更多資源請訪問:

https://blog.csdn.net/xudailong_blog/article/details/78762262

某課視訊教程

https://xudailong.cc/2018/09/30/muke-courses/

關注「蛇崽網盤教程資源」公眾號 ,在微信後臺回覆「領取資源」,獲取IT資源200G乾貨大全。

在微信後臺回覆「130個小程式」,即可免費領取享有匯入就能跑的微信小程式

在這裡插入圖片描述