76.反射-調(diào)用靜態(tài)方法和數(shù)組參數(shù)方法

使用反射調(diào)用靜態(tài)方法:

靜態(tài)方法不屬于任何對象,靜態(tài)方法屬于類本身.

此時把invoke方法的第一個參數(shù)設(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ù)組包裹一層
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容