首先新建一个用于实验的类
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);就可以了