Java反射 入門 使用 原理

2021-09-22 10:22:16 字數 1138 閱讀 6815

反射之中包含了乙個「反」字,所以想要解釋反射就必須先從「正」開始解釋。

一般情況下,我們使用某個類時必定知道它是什麼類,是用來做什麼的。於是我們直接對這個類進行例項化,之後使用這個類物件進行操作。

上面這樣子進行類物件的初始化,我們可以理解為「正」。

而反射則是一開始並不知道我要初始化的類物件是什麼,自然也無法使用 new 關鍵字來建立物件了。

這時候,我們使用 jdk 提供的反射 api 進行反射呼叫:

method method = clz.getmethod("setprice", int.class);

constructor constructor = clz.getconstructor();

object object = constructor.newinstance();

method.invoke(object, 4);

所以說什麼是反射?

反射就是在執行時才知道要操作的類是什麼,並且可以在執行時獲取類的完整構造,並呼叫對應的方法。

乙個簡單的例子

上面提到的示例程式,其完整的程式**如下:

private int price;

public int getprice()

public void setprice(int price)

public static void main(string args) throws exception}

從**中可以看到我們使用反射呼叫了 setprice 方法,並傳遞了 14 的值。之後使用反射呼叫了 getprice 方法,輸出其**。上面的**整個的輸出結果是:

從這個簡單的例子可以看出,一般情況下我們使用反射獲取乙個物件的步驟:

-獲取類的 class 物件例項

-根據 class 物件例項獲取 constructor 物件

-使用 constructor 物件的 newinstance 方法獲取反射類物件

而如果要呼叫某乙個方法,則需要經過下面的步驟:

獲取方法的 method 物件

method setpricemethod = clz.getmethod("setprice", int.class);
-利用 invoke 方法呼叫方法

反射學習系列1 反射入門

反射學習系列目錄 反射學習系列1 反射入門 反射學習系列2 特性 attribute 反射學習系列3 反射例項應用 作者 reflection,中文翻譯為反射。這是.net中獲取執行時型別資訊的方式,net的應用程式由幾個部分 程式集 assembly 模組 module 型別 class 組成,而...

反射學習系列1 反射入門

反射學習系列目錄 反射學習系列1 反射入門 反射學習系列2 特性 attribute 反射學習系列3 反射例項應用 作者 reflection,中文翻譯為反射。這是.net中獲取執行時型別資訊的方式,net的應用程式由幾個部分 程式集 assembly 模組 module 型別 class 組成,而...

java中反射的原理

簡單的回憶下,下次做具體的分析。首先有乙個反射包,這個包裡有這些類,方法類 放類裡的一些方法,構造方法類,放構造方法資訊 欄位類,放類的一些字段資訊,class類,這個類的型別資訊,乙個類在編譯完後會形成乙個.class檔案,這個檔案裡會有乙個class類存放這個類的型別資訊。執行期間,我們如果要產...