一、什麼是註解
官方定義:
註解是一系列元數據,它提供數據用來解釋程序代碼,但是註解並非是所解釋的代碼本身的一部分。註解對於代碼的運行效果沒有直接影響。
註解有許多用處,主要如下:
- 提供信息給編譯器:編譯器可以利用註解來探測錯誤和警告信息。
- 編譯階段時的處理:軟件工具可以用來利用註解信息來生成代碼、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基礎六:反射](https://blog.csdn.net/u013277209/article/details/102782208)
註解+反射 在數據庫框架方面的應用:
有一張用戶表,包含id name age gender 對每一個字段進行檢索並打印出Sql語句
1、自定義Table和Column註解
2、編寫User類
3、利用反射獲取註解信息,實現Sql語句查詢
運行輸出:
關鍵字: Annotation 代碼 註解