吃透Java基礎十:註解

一、什麼是註解

官方定義:

註解是一系列元數據,它提供數據用來解釋程序代碼,但是註解並非是所解釋的代碼本身的一部分。註解對於代碼的運行效果沒有直接影響。

註解有許多用處,主要如下:

  • 提供信息給編譯器:編譯器可以利用註解來探測錯誤和警告信息。
  • 編譯階段時的處理:軟件工具可以用來利用註解信息來生成代碼、Html文檔或者做其它相應處理。
  • 運行時的處理:某些註解可以在程序運行的時候接受代碼的提取

值得注意的是,註解不是代碼本身的一部分。

我們通俗一點理解就是:註解就相當於超市裡面商品的標籤,它不屬於商品,它只是為商品做一些解釋說明,而註解就是為我們的代碼作解釋說明,並不屬於我們代碼本身的部分。

二、註解的使用

JDK中提供的註解*

JDK裡面提供的幾個註解

  • @Override: java.lang.Override 是一個標記類型註解,它被用作標註方法。它說明了被標註的方法重載了父類的方法,起到了斷言的作用。如果我們使用了這種註解在一個沒有覆蓋父類方法的方法時,java 編譯器將以一個編譯錯誤來警示。
  • @Deprecated:表示該方法已經過時了。(當方法或是類上面有@Deprecated註解時,說明該方法或是類都已經過期不能再用,但不影響以前項目使用,提醒你新替代待的方法或是類。如果程序員不小心使用了它的元素,那麼編譯器會發出警告信息。)
  • @SuppressWarnings:表示忽略指定警告,比如@SuppressWarnings("Deprecation")
  • @SafeVarargs:參數安全類型註解。它的目的是提醒開發者不要用參數做一些不安全的操作,它的存在會阻止編譯器產生 unchecked 這樣的警告。它是在 Java 1.7 的版本中加入的。
  • @FunctionalInterface:函數式接口註解,這個是 Java 1.8 版本引入的新特性。

元註解

java.lang.annotation 提供了四種元註解,專門註解其他的註解(在自定義註解的時候,需要使用到元註解)。

  • @Retention:定義該註解的生命週期。

RetentionPolicy.SOURCE:註解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。

RetentionPolicy.CLASS:註解只被保留到編譯進行的時候,它並不會被加載到 JVM 中。

RetentionPolicy.RUNTIME:註解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它們。

  • @Target:表示該註解用於什麼地方。默認值為任何元素,表示該註解用於什麼地方。可用的ElementType 參數包括:

ElementType.CONSTRUCTOR: 用於描述構造器。

ElementType.FIELD: 成員變量、對象、屬性(包括enum實例)。

ElementType.LOCAL_VARIABLE: 用於描述局部變量。

ElementType.METHOD: 用於描述方法。

ElementType.PACKAGE: 用於描述包。

ElementType.PARAMETER: 用於描述參數。

ElementType.TYPE: 用於描述類、接口(包括註解類型) 或enum聲明。

  • @Documented:一個簡單的Annotations 標記註解,表示是否將註解信息添加在java 文檔中。
  • @Inherited :表示當前註解可以由子註解來繼承。
  • @Repeatable:是可重複的意思,Java 1.8 才加進來的,指的是註解的值可以同時取多個。

自定義註解

  • Annotation型定義為@interface,所有的Annotation 會自動繼承java.lang.Annotation這一接口,並且不能再去繼承別的類或是接口。
  • 參數成員只能用public 或默認這兩個訪問權修飾,可以用default設置默認值。也可以不定義成員。
  • 參數成員只能用基本類型byte、short、char、int、long、float、double、boolean八種基本數據類型和String、Enum、Class、annotations等數據類型,以及這一些類型的數組。
  • 要獲取類方法和字段的註解信息,必須通過Java的反射技術來獲取 Annotation 對象,因為你除此之外沒有別的獲取註解對象的方法
吃透Java基礎十:註解

註解經典運用

運行期利用反射可以獲取註解:詳情請移步[吃透Java基礎六:反射](https://blog.csdn.net/u013277209/article/details/102782208)

註解+反射 在數據庫框架方面的應用:

有一張用戶表,包含id name age gender 對每一個字段進行檢索並打印出Sql語句

1、自定義Table和Column註解

吃透Java基礎十:註解

2、編寫User類

吃透Java基礎十:註解

3、利用反射獲取註解信息,實現Sql語句查詢

吃透Java基礎十:註解

運行輸出:

吃透Java基礎十:註解


分享到:


相關文章: