首先新建一個用於實驗的類
public class TestClass { /** * 公共方法,沒有參數,沒有返回值 */ public void test() { System.out.println("test"); } /** * 公共方法 * @param str * @return */ public String testReturnString(String str) { return str; } /** * 私有方法 * @return */ private String testReturnString1() { System.out.println("fail"); return "fail"; } }
然后下一步就是要調用TestClass中的方法了
try { /*需要用到的類*/ Class simpleClass = TestClass.class; /*實例需要用的類*/ Object simpelObject = simpleClass.newInstance(); //取得該類下的方法 //第一個參數是方法名,第二個參數是該方法的"參數"類型 Method method = simpleClass.getDeclaredMethod("test", null); //調用該方法 //第一個參數不太了解,第二個參數是參數值 Object o = method.invoke(simpelObject, null); System.out.println("return:::::" + o); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); }
上面的是沒有參數沒有返回值的,那帶參數的方法如何調用呢?
try { /*需要用到的類*/ Class simpleClass = TestClass.class; /*實例需要用的類*/ Object simpelObject = simpleClass.newInstance(); /*參數類型數組*/ Class[] program =new Class[]{String.class}; //取得該類下的方法 //第一個參數是方法名,第二個參數是該方法的"參數"類型 Method method = simpleClass.getDeclaredMethod("test", program); //調用該方法 //第一個參數不太了解,第二個參數是參數值 Object o = method.invoke(simpelObject, "test value"); System.out.println("return:::::" + o); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); }
如果是訪問私有方法,只需要設置method.setAccessible(true);就可以了
