如何在Java中使用反射调用类的main()方法(How to call main() method

2019-07-22 19:47发布

当使用反射从另一个主要方法调用一个Java类的主要方法,

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

thisMethod.invoke(null, new String[0]);

我是否该建立的newInstance()或只需调用的main(),因为它是静态的。

Answer 1:

对于你们所要求的(动态调用一个随机类的主要方法,以反映你有很多的不必要的代码。

  • 你不需要调用构造函数的类
  • 你并不需要反思的类领域
  • 既然你调用一个静态方法,你甚至不需要真正的对象调用的方法上

您可以修改下面的代码,以满足您的需求:

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();
}


Answer 2:

认知回答看起来是正确的; 如果你从一个罐子不是在类路径中需要负载,可以使用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();
      }


文章来源: How to call main() method of a class using reflection in java