在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用。其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数组.
如一个类中main方法的参数为String[] args,则在Java reflect中调用时,需要放在new Object[]{}中。
/** * 调用非当前路径下的类 */ public void classLoadTest2(){ try { URL[] urls = new URL[]{ new File("D:\Users\workspace\ClassLoadTest\bin").toURI().toURL() }; ClassLoader clsLoader = new URLClassLoader(urls, this.getClass().getClassLoader()); Class<?> c =clsLoader.loadClass("test.ClassLoaderTest"); //Class<?> c = Class.forName("test.ClassLoaderTest"); Method[] ms = c.getDeclaredMethods(); Object obj = c.newInstance(); for(int i=0;i<ms.length;i++){ Method m = ms[i]; System.out.println("Method:" + m.getName()); Type[] types = m.getGenericParameterTypes(); System.out.println("param count:" + types.length); for (int j = 0; j < types.length; j++) { System.out.println("Method[" + m.getName() + "] params:" + types[j].toString()); } if("main".equals(m.getName())){ m.invoke(obj, new Object[]{new String[]{}}); } } } catch (Exception e) { e.printStackTrace(); } }