Java 反射學習筆記
反射
指程式可以訪問、檢測和修改它本身狀態或行為的一種能力
Java 通過位元組碼反射出類中的資訊,包含:類、屬性、方法、構造、繼承、實現
在 JDK 中java.lang
包與java.lang.reflect
包下
一. Class 類
在反射中 Class 代表一個類,也叫類型別,是 Java 資料型別中的一種
建立方式
-
Class.forName("完整路徑")
-
類名.class
-
物件名.getClass()
常用方法
-
getName()
:獲取類的完整路徑 -
getSimpleName()
:獲取類的名稱 -
newInstance()
:建立類的新例項,就是新物件
二. Java 中的資料型別(☆)
-
基本資料型別(8種)
-
引用型別(陣列和物件)
-
列舉
-
類型別
三. Java 中建立物件方式(☆)
-
new關鍵字
-
反序列化
-
反射
-
克隆
四. Constructor
在 Java 反射中 Constructor 的一個例項代表一個類的構造方法,可以通過類型別獲取
建立方式
-
class物件.getConstructors()
:獲取所有的構造方法,返回一個構造方法陣列 -
class物件.getConstructor()
:獲取指定構造方法
常用方法
-
getName()
:獲取構造方法的名稱 -
getParameterTypes()
-
getModefiers()
:獲取構造方法訪問修飾符 -
getExceptionTypes()
:獲取構造方法的異常 -
newInstance()
:根據指定的構造方法建立物件
五. Filed
在 Java 反射中 Filed 一個例項代表一個類中的屬性
建立方式
-
getDeclaredFields()
:獲取本類中的所有屬性,返回一個屬性陣列 -
getDeclaredField(String name)
:根據名稱獲取本類中的單個屬性 -
getFields()
:獲取父類、父介面中所有的 public 修飾的屬性 -
getField(String name)
常用方法
-
getName()
:獲取屬性名稱 -
getModifiers()
:獲取屬性訪問修飾符 -
getType()
:獲取屬性資料型別 -
setAccessible(boolean b)
:設定私有變數的訪問許可權,預設為 false -
set(Object obj, Object value)
:給屬性賦值 -
get(Objuct obj)
:獲取屬性值 -
getModifiers()
:獲取該屬性的訪問修飾符的 int 表示 -
Modifier.toString(1)
:根據訪問修飾符的 int 值獲取相對應的字串表示
六. Method
在反射中 Method 一個例項代表一個類中的方法
建立方式
-
Class物件.getDecaredMethods()
:獲取本類中所有的方法 -
Class物件.getDeclaredMethod(String name,Class<?> paramType)
:根據方法名稱與引數列表獲取本類中指定的方法 -
Class物件.getMethods()
:獲取本類、父類、父介面中的所有方法 -
Class物件.getMethod(String name,Class<?> paramType)
:根據方法名稱與引數列表獲取本類
常用方法
-
getName()
:獲取方法名 -
getParameterTypes()
:獲取引數列表 -
getModifiers()
:訪問修飾符 -
getReturnType()
:獲取返回值型別 -
getExceptionTypes()
:獲取異常型別 -
invoke(Object obj, Object paramValue)
:執行方法(方法的回撥)
七. 註解
註解的定義
-
@Documented
:表示註解文件 -
public @interface Table{}
:表示註解類 定義註解,並不是 interface -
@Target(value={ElementType.TYPE}
:表示作用範圍,作用範圍由ElementType指定,常用如下:-
TYPE 表示作用在類上
-
FIELD 表示作用在欄位上
-
METHOD 表示作用在方法上
-
PARAMETER 表示作用在引數列表上
-
CONSTRUCTOR 表示作用在構造方法上
-
-
@Retention(RetentionPolicy.RUNTIME)
:指定註解的生命週期,一共三種,通過 RetentionPolicy 定義,具體如下:-
SOURCE 表示在原始碼中有效
-
CLASS 表示在位元組碼檔案中有效(.class檔案)
-
RUNTIME 表示在 JVM 執行時有效
-
注:如果註解裡面只有一個 value 屬性,可以省略不寫,預設就是
value=
註解的獲取
-
Class物件.getAnnotation(Class annotationClass)
:獲取類上的註解 -
Field物件.getAnnotation(Class annotationClass)
:獲取欄位上的註解 -
Method物件.getAnnotation(Class annotationClass)
:獲取方法上的註解
本文來自部落格園,作者:Schieber,轉載請註明原文連結:https://www.cnblogs.com/xiqingbo/p/java-21.html