關於java反射機制建立Class物件、建立例項物件,呼叫方法
阿新 • • 發佈:2020-12-13
關於java反射機制建立Class物件、建立例項物件,呼叫方法
通過反射機制建立Class物件使用最多的方法就是通過Class.forName返回Class物件,因為這種方法需要傳遞的引數是一個字串,字串可以寫入配置檔案,方便修改。
通過類地址建立Class物件
Class c = Class.forName(“com.liheng.business.text.Text”);
根據傳入引數獲取對應構造方法物件(直接呼叫newInstance方法只能建立無參構造)
Constructor c1 = c.getConstructor(int.class,String.class);
Object c2 = c1.newInstance(1,“s”);
獲取方法物件
Method prMethod = c.getDeclaredMethod(“pr”,String.class,String.class,String.class);
呼叫函式
Object obj = prMethod.invoke(c2,“hello”," ",“word”);
//建立Class物件,傳入的字串為要反射的物件的完整名稱,即加上了所有包名的名字
Class c = Class.forName("com.liheng.business.text.Text" );
//通過class物件獲取物件的構造方法,傳入的引數數量和型別取決於要獲取的構造方法
Constructor c1 = c.getConstructor(int.class,String.class);
//通過構造方法建立例項物件
Object c2 = c1.newInstance(1,"s");
//通過Class物件來獲取物件中的方法,傳入的第一引數是獲取的方法的名字,後面的引數是想要獲取的方法的數量及型別
Method prMethod = c.getDeclaredMethod("pr" ,String.class,String.class,String.class);
//使用方法物件呼叫函式,完成呼叫方法,第一個引數是此方法的例項物件,後面的引數是呼叫此方法需要傳入的實參,返回值是Object型別
Object obj = prMethod.invoke(c2,"hello"," ","word");
System.out.println(obj);
/**
* 建立一個Text類作為反射機制的練習
* Text類有一個int型別的引數和一個String型別的引數
* 一個pr方法,形參是三個String型別的,返回值是String的
*/
public class Text {
private int i;
private String j;
public Text(int i,String j) {
this.i = i;
this.j = j;
}
public Text() {
}
public String pr(String a, String b, String c){
System.out.println(a + b + c);
return a + b + c;
}
}
輸出結果中第一個是呼叫方法輸出,第二個是輸出的返回結果