反射的原理
應用在一些通用性比較高的**中
後面學到的框架,大多數都是使用反射來實現的
在框架開發中,都是基於配置檔案開發
在配置檔案中配置了類,可以通過反射得到類中的所有內容,可以讓類中的某個方法來執行
使用反射首先需要得到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類存放這個類的型別資訊。執行期間,我們如果要產...