JAVA 反射 常用方法的示例 詳解

  • 2019 年 11 月 7 日
  • 筆記

什麼是Java 反射?

就是正在運行,動態獲取這個類的資訊。

反射機制的作用?

1.反編譯 .class 文件到 .java 文件

2.通過反射機制 訪問對象的構造方法,方法,屬性等。

如何通過反射獲取類?

這裡又三種方法,可以通過反射動態獲取類。

第一種:

第二種:

第三種:

這三種有什麼區別?

總結:第一種通過forName() 方法 執行靜態塊,不執行動態塊

第二種通過.class 方法 不執行靜態塊和動態塊

第三種:需要創建對象,靜態塊,動態塊都會執行

注意:靜態塊 類只載入一次,如果已經載入則不會重複載入,動態塊,每次new 對象都會執行。

效果如圖:

第一種:

第二種:

第三種:

java反射創建對象?

如何創建對象?

通過實例化構造函數來創建對象。

通過反射創建對象

1.實例化 無參 構造函數

2.實例化有參構造函數

通過反射獲取方法,屬性等API

getDeclaredMethods() :獲取該類的所有方法

getReturnType() :獲取該類方法的返回值

getParameterTypes() :獲取該類方法傳入參數

getDeclaredFields() :獲取該類所有欄位

setAccessible :允許訪問私有成員

這裡都是獲取改類的?那麼如何獲取父類的呢?

通過 子類.getSuperclass() 獲取父類對象

getDeclaredMethods 獲取該類的所有方法

getReturnType()獲取方法的返回值

getParameterTypes() 獲取該類方法的傳入參數類型

getDeclaredFields() 可以訪問變數,注意這裡只能訪問公共成員變數私有變數是訪問不到的

setAccessible 設置可以訪問私有成員變數