JAVA中的反射

2021-08-04 01:25:52 字數 1545 閱讀 5460

反射的原理

應用在一些通用性比較高的**中

後面學到的框架,大多數都是使用反射來實現的

在框架開發中,都是基於配置檔案開發

在配置檔案中配置了類,可以通過反射得到類中的所有內容,可以讓類中的某個方法來執行

使用反射首先需要得到class類

三種方式獲取class類:類名.class

物件.getclass()

使用class.forname("路徑")

類中內容分別可通過不同的類來表示:

屬性--field

構造方法--constructor

普通方法--method

//獲取class類的三種方式

class clazz1 = person.class;

class clazz2 = new person().getclass();

class clazz3 = class.forname("testreflect.person");

使用反射操作構造方法(不使用new新建類的例項)

//例項化類,不使用new 無參建構函式

@test

public

void

test1() throws exception

//例項化類,不使用new 有參建構函式

@test

public

void

test2() throws exception

使用反射操作類裡面的屬性

得到物件class c3 = class.forname("testreflect.person");

person p1 = (person)c3.newinstance();

得到屬性field f1 = c3.getdeclaredfield("name");

允許操作私有屬性f1.setaccessible(true);

//操作name屬性

@test

public

void

test3() throws classnotfoundexception, nosuchfieldexception, illegalacces***ception, instantiationexception

使用反射操作普通方法

使用method類來操作普通方法

獲得方法:method m1 = c4.getdeclaredmethod("setname", string.class);

執行方法:m1.invoke(p1,"haha");

操作私有方法:m1.setaccessible(true);

操作靜態方法:m1.invoke(null,"變數");

//操作普通方法

@test

public

void test4() throws exception

Java中的反射

反射,曾經聽說過,一致覺得,須要什麼樣的類,就寫什麼樣的類,不就成了,何必去 別人類中元素。所以一直沒學習關於反射的東西。直到前幾天看到改動listview的高速滑塊影象。看到須要用到反射 昨天也就看了看反射 先說概念 反射就是載入乙個執行時才得知名稱的類,獲悉其完整構造,並生成物件屍體。或對其變數...

JAVA中的反射

應用場景 程式在執行時接收到外部傳入的乙個物件,該物件在編譯時型別是object,但程式又需要呼叫該物件執行時的型別的方法。為了解決這個問題,程式需要在執行時發現物件和類的真實資訊。解決該問題有以下兩個做法。第一種做法是假設在編譯時和執行時的都完全知道型別的真實資訊。在這種情況下,可以先使用inst...

java中反射的原理

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