通過反射機制還可以調用方法,這與調用構造方法類似。調用方法需要使用Method對象,它對應着一 個方法,獲得Method對象需要使用Class類的如下方法:
- Method[] getMethods():返回所有公有方法Method對象數組。
- Method[] getDeclaredMethods():返回所有方法Method對象數組。
- Method getMethod(String name, Class… parameterTypes):通過方法名和參數類型返回公有方法 Method對象。參數parameterTypes是Class數組,指定方法的參數列表。
- Method getDeclaredMethod(String name, Class… parameterTypes):通過方法名和參數類型返回方 法Method對象。參數parameterTypes同上。
現有一個Person類:
public class Person {
public String name;
public int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setNameAndAge(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
現在編寫一個程序通過反射機制調用Person類setNameAndAge和getName方法,具體代碼如下:
import java.lang.reflect.Method;
public class HelloWorld {
public static void main(String[] args) {
try{
Class clz = Class.forName("Java反射機制.調用方法.Person");
// 調用默認構造方法
Person person = (Person) clz.newInstance();
System.out.println(person);
// 1.指定參數類型
Class[] params = new Class[2];
// 第一個參數是String
params[0] = String.class;
// 第二個參數是int
params[1] = int.class;
// 2.獲取setNameAndAge方法對象
Method method = clz.getMethod("setNameAndAge",params);
// 3。設置傳遞參數
Object[] argObjs = new Object[2];
// 第一個參數傳遞Tony
argObjs[0] = "Tony";
// 第二個參數傳遞21
argObjs[1] = 21;
// 4.調用setNameAndAge方法,person是要調用的對象,argObjs是設置要傳遞的參數值
method.invoke(person,argObjs);
System.out.println(person);
// 獲取getName方法對象,該方法沒有參數
method = clz.getMethod("getName");
// 調用getName方法
Object result = method.invoke(person);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行結果:
Person{name='null', age=0}
Person{name='Tony', age=21}
Tony
以上內容僅供參考學習,如有侵權請聯繫我刪除!
如果這篇文章對您有幫助,左下角的大拇指就是對博主最大的鼓勵。
您的鼓勵就是博主最大的動力!