通过VM选项调用java类静态初始化

时间:2014-01-06 14:30:30

标签: java jvm static-initialization

有没有办法在输入类B的{​​{1}}方法之前强制静态初始化某个类main(),而不使用VM选项更改类A

2 个答案:

答案 0 :(得分:1)

如果没有代码,我不知道有什么方法可以做到。在代码中,当然很容易。

public class C {
   static {
      // Fetch and throw away an instance of B to make sure it is loaded
      B.getInstance();
   }

   static void main(String[] args) {
      // Do stuff, B is initialized
      A.main(args);
   }
}

事实上你可以做到

public class C {
   static void main(String[] args) {
      B.getInstance();
      A.main(args);
   }
}

你的要求虽然没有多大意义。通过这样做问一个关于你试图解决的问题的问题,你希望得到一个更有用的答案。

答案 1 :(得分:0)

你可以创建一个初始化其他类的类,然后调用真正的main方法,例如:

public static void main(String[] args) throws Exception {
    Class<?> mainClass = Class.forName(System.getProperty("mainClass"));

    for (String className : System.getProperty("initClasses").split(";")) {
        Class.forName(className);
    }

    Method main = mainClass.getMethod("main", String[].class);
    main.invoke(null, new Object[] { args });
}

然后,您将使用该类作为主类启动应用程序,并指定真正的主类和要通过属性初始化的类。