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



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

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

我应该创建newInstance()还是直接调用main(),因为它是静态的

对于您声明的需求(动态调用一个随机类的main方法),由于反射,您有许多不必要的代码。

  • 不需要调用类的构造函数
  • 你不需要自省类字段
  • 因为你调用的是静态方法,你甚至不需要一个真正的对象来调用
  • 上的方法

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

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

perception的答案看起来是正确的;如果你需要从不在类路径中的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();
      }

相关内容

  • 没有找到相关文章

最新更新