什麼是註解
- 從JDK5開始,Java增加對元數據的支持,也就是註解,
- 可以把註解理解爲代碼裏的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,並執行相應的處理。
- 通過註解開發人員可以在不改變原有代碼和邏輯的情況下在源代碼中嵌入補充信息。
- 註解是一種特殊的Java構造器,它可以用於裝飾
類方法、字段、參數,變量、構造函數、包、或者註解
爲什麼使用註解
當我們希望在代碼元素(類方法、字段、參數,變量、構造函數、包、或者註解)
上只要加上特定的標識,便能達到想有的功能時,就可以使用註解
例如:我們希望告訴編譯器,這個類已經被廢棄,儘量不要使用了,那麼就可以在類上面加上系統定義的@Deprecated註解(如下圖1),編譯器編譯時就會將該類加上標記中線(如圖2),註解的作用不僅可以在編譯期,運行時也是可以用的
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200607142046663.png
註解的類型
註解類型分爲兩種,第一種是
元註解
,第二種是自定義註解
元註解: 註解自定義註解
,從而指定自定義註解
的作用範圍、保留到編譯還是類加載還是運行時等作用,元註解
是系統定義我們只能使用不能創建,下面是元註解的使用說明
- @Target
表示該註解可以用於什麼地方,可能的ElementType參數有 CONSTRUCTOR: 構造器的聲明 FIELD: 域聲明(包括enum實例) LOCAL_VARIABLE: 局部變量聲明 METHOD: 方法聲明 PACKAGE: 包聲明 PARAMETER: 參數聲明 TYPE: 類、接口(包括註解類型)或enum聲明
- @Retention
表示需要在什麼級別保存該註解信息。可選的RetentionPolicy參數包括: SOURCE:註解將被編譯器丟棄 CLASS:註解在class文件中可用,但會被VM丟棄 RUNTIME:VM將在運行期間保留註解,因此可以通過反射機制讀取註解的信息。
- @Document
將註解包含在Javadoc中
- @Inherited
允許子類繼承父類中的註解
自定義註解: 註解到代碼元素(類方法、字段、參數,變量、構造函數、包、或者註解)
,使其達到特有的功能,自定義註解我們是可以創建使用的
- 系統的自定義註解
@Override //當前的方法定義將覆蓋超類中的方法 @Deprecated //使用了註解爲它的元素編譯器將發出警告,因爲註解@Deprecated是不贊成使用的代碼,被棄用的代碼 @SuppressWarnings //關閉不當編譯器警告信息 ....
創建一個註解
- 創建一個@interface類
- 指定該註解只能哪些地方使用
- 指定該註解需要在什麼級別保存該註解信息
- 設置註解參數(可選)
將註解修飾在代碼元素上
- 查看註解可以用於什麼地方
- 查看註解的參數
- 在元素上方加上註解
查找註解並特殊處理
我們在代碼元素上增加註解後,代碼在調用的時候,就可以查看元素上有沒有這個註解,有的話就做特定的處理
涉及的重要類
- java.lang.annotation.Annotation
- java.lang.annotation.ElementType
- java.lang.annotation.RetentionPolicy
總結
以上就是註解的使用,我們通過合適的地方加上註解,在合適的地方找到註解並處理事務就是核心思想,butterknife我們都用過,其實自己實現一個也是很簡單的,下篇將手寫一個butterknife功能,來更深入的瞭解註解玩法