使用反射調(diào)用靜態(tài)方法:
靜態(tài)方法不屬于任何對象,靜態(tài)方法屬于類本身.
此時把invoke方法的第一個參數(shù)設置為null既可.
static public void doWork(String name){
System.out.println("Person.doWork()"+name);
}
m = clz.getMethod("doWork",String.class);
ret = m.invoke(null,"Lucy");
使用反射調(diào)用數(shù)組參數(shù)(可變參數(shù))
解決辦法:調(diào)用方法的時候把實際參數(shù)全部作為Object數(shù)組的元素既可.
調(diào)用靜態(tài)方法:
public void test(){
//1.獲取字節(jié)碼對象
Class<?> clz = Class.forName("com.java520.class01.Person");
//2.獲取靜態(tài)方法
Method m = clz.getMethod("run");
//調(diào)用靜態(tài)方法
m.invoke(null, null);//因為靜態(tài)方法不需要對象就能 調(diào)用,所以不用傳對象進去
}
調(diào)用含有數(shù)組參數(shù)的方法:
public void test(){
//1.獲取字節(jié)碼對象
Class<?> clz = Class.forName("com.java520.class01.Person");
//獲取私有多參靜態(tài)方法
Method m1 = clz.getDeclaredMethod("study", String[].class);
m1.setAccessible(true);
//m1.invoke(null, new String[]{"紅樓夢","水滸傳"});//error 因為引用類型會自動解包
m1.invoke(null, new Object[]{new String[]{"紅樓夢","水滸傳"}}); //正確方式 使用Object[] 數(shù)組包裹一層
}