反射和註解
內建註解
-
@Override(覆蓋,重寫)
定義在java.lang.Override中,用於修飾方法,只能用於重寫父類的方法的時候使用
-
@Deprecated(不贊成,強烈反對)
定義在java.lang.Deprecate中,此註解可用於修飾方法,屬性和類,表示不鼓勵程式設計師使用這樣的元素(但可以使用)通常是因為它很危險或者存在更好的選擇。
並且表示此方法已廢棄、暫時可用,但以後此類或方法都不會再更新、後期可能會刪除,建議後來人不要呼叫此方法。
-
SuppressWarnings(鎮壓警告)
定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告資訊。
與前兩個註釋有所不同的是,這個註解需要新增一個系統定義好的引數才能正確使用。
相關引數如下:
引數 | 說明 |
---|---|
deprecation | 使用了過時的類或者方法的警告 |
unchecked | 執行了未檢查的轉換時的警告,如使用集合時未指定泛型 |
fallthrough | 當在switch語句使用時發生case穿透 |
path | 在類路徑、原始檔路徑等中有不存在路徑的警告 |
serial | 當在可序化的類上缺少serialVersionUID定義時的警告 |
finally | 任何finally字句不能完成時的警告 |
all | 關於以上所有情況的警告 |
— 壓制一種的寫法為:
— 壓制兩種或兩種以上的寫法為:
元註解
-
元註解的作用是負責註解其他註解。java定義了4個標準的meta-annotation型別,它們被用來提供對其他annotation型別做出說明。
-
四個型別分別為
-
@Target
-
用於描述註解的使用範圍()
-
-
@Retention(保留,維持)
表示需要在什麼級別儲存該註釋資訊,用於解釋註釋的生命週期
作用等級:SOURCE<CLASS<RUNTIME
-
@Documented
-
@Inherited
-
自定義註解
反射機制
動態語言
表示程式執行時,可以改變程式結構或變數型別,java不是動態語言,但是有一定的動態性,可以利用反射機制、位元組碼操作活得類似動態語言的特性。
反射機制
指的是可以與執行時載入,探知,使用編譯期間完全未知的類。
Class類介紹
-
java.lang.Class類十分特殊,用來表示java中型別(class、interface、enum、annotation、primitive type、void)本身
— Class類的物件包含了某個被載入類的結構,一個被載入的類對應一個Class物件。
— 當一個Class被載入,或當載入器(class loader)的defineClass()被JVM呼叫,JVM便會自動產生一個Class物件。
-
Class類是Reflection的根源。
— 針對任何想動態載入、執行的類,只有先獲得相應的Class物件。
Class類的物件獲取方法
-
運用getClass()
-
運用Class.forName() (最常被使用)
-
運用.class語法
Class clazz=Class.forName(包名+類名);
Class類常用的方法
clazz是上面的類名。
-
獲取類的名字
-
clazz.getName() —獲得包名+類名
-
clazz.getSimpleName() —獲得類名
-
-
獲取屬性資訊
-
clazz.getFields() —獲得public的field
-
clazz.getDeclaredFieds() —獲得所有的field
-
-
獲取方法資訊
-
clazz.getMethods() —獲得public的方法
-
clazz.getDeclaredMethods() —獲得所有的方法
-
Method method=clazz.getDeclaredMethod(“方法名",方法的返回值型別(沒有的話為空)); —獲取單個方法
-
-
獲取構造器資訊
-
Constructor[] constructors=c.getDeclaredConstructors();\\獲得所有構造器
-
Constructor[] constructors=c.getConstructors();\\獲得私有構造器
-
反射機制的常見作用
-
動態載入類、動態獲取類的資訊(屬性,方法,構造器)
-
動態構造物件
-
動態呼叫類和物件的任意方法、構造器
-
動態呼叫和處理屬性
-
獲取泛型資訊
-
處理註解