如何在java中使用reflection调用类的main()方法

当使用reflection从另一个main方法调用Java类的main方法时,

Class thisClass = loader.loadClass(packClassName); Method thisMethod = thisClass.getDeclaredMethod("main",String[].class); thisMethod.invoke(null, new String[0]); 

我应该创建newInstance()还是简单地调用main(),因为它是静态的。

对于您声明的要求(动态调用随机类的主要方法,使用reflection,您有很多不必要的代码。

  • 您不需要为该类调用构造函数
  • 您不需要内省类字段
  • 由于您正在调用静态方法,因此您甚至不需要真正的对象来调用该方法

您可以调整以下代码以满足您的需求:

 try { final Class clazz = Class.forName("blue.RandomClass"); final Method method = clazz.getMethod("main", String[].class); final Object[] args = new Object[1]; args[0] = new String[] { "1", "2"}; method.invoke(null, args); } catch (final Exception e) { e.printStackTrace(); } 

认知答案看起来是正确的; 如果您需要从不在类路径中的Jar加载,则可以使用URL类加载器

  try { URL[] urls; URLClassLoader urlLoader; urls = ...; urlLoader = new URLClassLoader(urls); @SuppressWarnings("rawtypes") Class runClass = urlLoader.loadClass(classToRun); Object[] arguments = new Object[]{args}; Method mainMethod = runClass.getMethod("main", String[].class); mainMethod.invoke(null, arguments); } catch (Exception e) { e.printStackTrace(); }