Java注解
1.注解的理解
- 注解(Annotation)也被稱為元資料(Metadata),用于修飾解釋 包、類、方法、屬性、構造器、區域變數等資料資訊
- 和注釋一樣,注解不影響程式邏輯,但注解可以被編譯或者運行,相當于嵌入在代碼中的補充資訊
- 在JavaSE中,注解的使用目的比較簡單,例如標記過時的功能,忽略警告等,在JavaEE中注解占據了更重要的角色,例如用來配置應用程式的任何切面,代替JavaEE舊版中所遺留的繁冗代碼和XML配置等,
基本的Annotation介紹:
使用Annotation時要在其前面添加@符號,并把該Annotation當成一個修飾符使用,用于修飾它支持的程式元素
-
三個基本的Annotation:
-
@Override:限定某個方法,是重寫父類方法,該注釋只能用于方法
-
@Deprecated:用于表示某個程式元素(類、方法等)已過時
-
@SuppressWarnings:抑制編譯器警告
-
2.@Override注解
例子:
package li.annotation;
public class Override_ {
public static void main(String[] args) {
}
}
class Father{//父類
public void fly(){
System.out.println("Father fly ...");
}
}
class Son extends Father{//子類
//@Override 放在fly方法上,表示子類的fly方法重寫了父類的fly方法
//即使這里沒有寫@Override,其實還是重寫了父類方法
//但是如果寫了@Override注解,編譯器就會檢查該方法是否整的重寫了父類的方法,
//如果的確重寫了就編譯通過,如果沒有構成重寫則編譯錯誤
//它的意義就在于語法的校驗
@Override
public void fly(){
System.out.println("Son fly ...");
}
}
@Override使用說明:
- @Override表示指定重寫父類的方法(從編譯層面驗證),如果父類沒有fly方法,則會報錯
- 如果不寫@Override注解,而父類仍有 public void fly(){},仍然構成重寫
- @Override只能修飾方法,不能修飾其他類、包、屬性等等
- 查看@Override注解原始碼為
@Target(ElementType.METHOD),說明只能修飾方法 - @Target是修飾注解的注解,稱為元注解
點擊@Override進去可以看到Override的定義:
補充說明:@interface的說明
@interface不是介面,是注解類 ,在JDK1.5之后加入的
3.@Deprecated注解
Deprecated用于表示某個程式元素(類、方法等)已經過時
例子:
package li.annotation;
public class Deprecated_ {
public static void main(String[] args) {
AAA a = new AAA();
a.hi();
System.out.println(a.n1);
}
}
// @Deprecated 修飾某個元素,表示該元素已經過時
// 即 不再推薦使用,但是仍然可以使用
@Deprecated
class AAA{
@Deprecated
public int n1 = 10;
@Deprecated
public void hi(){
}
}
查看@Deprecated注解類的原始碼:
@Deprecated使用說明:
- 用于表示某個程式元素(類、方法等)已過時
- @Deprecated可以修飾CONSTRUCTOR(構造器), FIELD(屬性), LOCAL_VARIABLE(區域變數), METHOD(方法), PACKAGE(包), PARAMETER(引數), TYPE(型別)
- @Deprecated的作用可以做到新舊版本的兼容和過渡
3.@SuppressWarnings注解
@SuppressWarnings屬性介紹及屬性說明:(部分)
| 屬性 | 屬性說明 |
|---|---|
| all | 抑制所有警告 |
| boxing | 抑制裝箱、拆箱操作時候的警告 |
| cast | 抑制映射相關的警告 |
| dep-ann | 抑制啟用注釋的警告 |
| deprecation | 抑制過期方法警告 |
| fallthrough | 抑制確在switch中缺失breaks的警告 |
| finally | 抑制finally模塊沒有回傳的警告 |
| hiding | 抑制與隱藏變數的區域變數相關的警告 |
| incomplete-switch | 忽略沒有完整的switch陳述句 |
| nls | 忽略非nls格式的字符 |
| null | 忽略對null的操作 |
| rawtypes | 忽略沒有指定泛型的警告(傳參時沒有指定泛型的警告錯誤) |
| restriction | 抑制使用不建議或禁止參照相關的警告 |
| serial | 抑制與實作序列化的類遺漏serialVersionUID的的警告 |
| static-access | 抑制不正確的靜態訪問方式警告 |
| synthetic-access | 抑制子類沒有按最優方法訪問內部類的警告 |
| unchecked | 抑制沒有進行型別檢查操作的警告 |
| unqualified-field-access | 抑制沒有權限訪問的域的警告 |
| unused | 抑制沒被使用過的代碼的警告 |
例子:
package li.annotation;
import java.util.ArrayList;
import java.util.List;
// 1.當我們不希望看到警告時,可以使用@SuppressWarnings注解來抑制警告資訊
// 2.在{""}中,可以寫入你希望抑制(不顯示)的警告資訊
// 3.@SuppressWarnings的作用范圍和你放置的位置有關
// 比如 @SuppressWarnings放置在main方法,那么抑制警告的范圍就是main方法
public class SuppressWarnings_ {
@SuppressWarnings({"all"})
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("mary");
list.add("Bob");
System.out.println(list);//[jack, mary, Bob]
}
}
查看@SuppressWarnings原始碼:
-
@SuppressWarnings可以放置的位置有:TYPE(型別), FIELD(屬性), METHOD(方法), PARAMETER(引數), CONSTRUCTOR(構造器), LOCAL_VARIABLE(區域變數)
-
該注解類有一個陣列
String[] value(),通過該陣列可以在@SuppressWarnings({""})中設定多個屬性,如@SuppressWarnings({"rawtypes","unchecked","unused"});
4.元注解
元注解的基本介紹:
JDK的元Annotation用于修飾其他Annotation
元注解的種類:
-
Retention:指定注解的作用范圍,三種:SOURCE,CLASS,RUNTIME
-
Target:指定注解可以在哪些地方使用
-
Documented:指定該注解是否會在javadoc中體現
-
Inherited:子類會繼承父類注解
4.1@Retention注解
說明:
只能用于修飾一個Annotation定義,用于指定該Annotation可以保留多長時間,@Rentention包含一個RetentionPolicy型別的成員變數,使用@Rentention時必須為該value成員變數指定值:
? @Rentention的三種值:
- RetentionPolicy.SOURCE:編譯器使用后,直接丟棄這種策略的注解
- RetentionPolicy.CLASS:編譯器把注解記錄在class檔案中,當運行Java程式時,JVM不會保留注解,這是默認值
- RetentionPolicy.RUNTIME:編譯器把注解記錄在class檔案中,當運行Java程式時,JVM會保留注解,程式可以通過反射來獲取該注解

4.2@Target注解
基本說明:
用于修飾Annotation定義,用于指定 被修飾的Annotation可以用于修飾 哪些程式元素
@Target也包含一個名為value的成員變數
@Documented
@Retention(RetentionPolicy.RUNTIME)//它的作用范圍是RUNTIME
@Target(ElementType.ANNOTATION_TYPE)//這里的ANNOTATION_TYPE 說明@Target只能修飾注解
public @interface Target {//注釋類
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
4.3@Documented注解
基本說明:
@Documented:用于指定被該元Annotation修飾的Annotation類將被 javadoc工具提取生成檔案,即在生成檔案時,可以看到該注解,
PS:定義為@Documented的注解必須設定Retention值為RUNTIME
4.4@Inherited注解
被它修飾的Annotation將具有繼承性,如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該注解
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/503353.html
標籤:其他
下一篇:Vector底層實作
