反射,曾經聽說過,一致覺得,須要什麼樣的類,就寫什麼樣的類,不就成了,何必去**別人類中元素。所以一直沒學習關於反射的東西。直到前幾天看到改動listview的高速滑塊影象。看到須要用到反射
昨天也就看了看反射
先說概念
反射就是載入乙個執行時才得知名稱的類,獲悉其完整構造,並生成物件屍體。或對其變數設定或呼叫方法
通俗地說就是
了解類和
改動類
了解類就是
從構造方法 、成員變數、方法、各元素的修飾符了解類
測試類:
package test;
public class myobject
public myobject(int a, int b)
public int sum()
public int minus()
public int multiply()
public int divide()
}
class c = class.forname("test.myobject");
從構造方法
constructor constructors = c.getconstructors();
for(int i = 0;i>>"+constructors[i].tostring());
system.out.println("----->>方法名:"+constructors[i].getname());
system.out.println("----->>修飾符:"+constructors[i].getmodifiers());
class p= constructors[i].getparametertypes();
for(int j=0;j
field fields = c.getdeclaredfields();
for(int i = 0 ;i>變數名:"+f.getname());
system.out.println("------->>變數型別:"+f.getmodifiers());
system.out.println("----->>修飾符:"+f.gettype());
}
方法:
method m = c.getdeclaredmethods();
for(int i = 0;i>>"+m[i].tostring());
system.out.println("----->>方法名:"+m[i].getname());
system.out.println("----->>修飾符:"+m[i].getmodifiers());
system.out.println("------>>返回值 :"+m[i].getreturntype());
class p= m[i].getparametertypes();
for(int j=0;j以下就是通過反射去應用類
//建立類的物件
classp = new class[2];
p[0]=int.class;
p[1]=int.class;
constructor constructor =c.getconstructor(p);
object object = constructor.newinstance(34 ,90);
//改動成員變數
field fielda= c.getfield("a");
system.out.println("----->>改變前:"+fielda.get(object));
fielda.setint(object, 190);
system.out.println("----->>改變後:"+fielda.get(object));
//呼叫類的方法
method method1 = c.getmethod("sum");
object sum = method1.invoke(object);
system.out.println("--->>加=="+sum);
JAVA中的反射
反射的原理 應用在一些通用性比較高的 中 後面學到的框架,大多數都是使用反射來實現的 在框架開發中,都是基於配置檔案開發 在配置檔案中配置了類,可以通過反射得到類中的所有內容,可以讓類中的某個方法來執行使用反射首先需要得到class類 三種方式獲取class類 類名.class 物件.getclas...
JAVA中的反射
應用場景 程式在執行時接收到外部傳入的乙個物件,該物件在編譯時型別是object,但程式又需要呼叫該物件執行時的型別的方法。為了解決這個問題,程式需要在執行時發現物件和類的真實資訊。解決該問題有以下兩個做法。第一種做法是假設在編譯時和執行時的都完全知道型別的真實資訊。在這種情況下,可以先使用inst...
java中反射的原理
簡單的回憶下,下次做具體的分析。首先有乙個反射包,這個包裡有這些類,方法類 放類裡的一些方法,構造方法類,放構造方法資訊 欄位類,放類的一些字段資訊,class類,這個類的型別資訊,乙個類在編譯完後會形成乙個.class檔案,這個檔案裡會有乙個class類存放這個類的型別資訊。執行期間,我們如果要產...