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

通过VM选项调用java类静态初始化,java,jvm,static-initialization,Java,Jvm,Static Initialization,在进入类A的main()方法之前,是否有任何方法可以强制对某个类B进行静态初始化,而不必更改类A,只使用VM选项?我不知道有什么方法可以不使用代码进行初始化。在代码中,这当然很容易 public class C { static { // Fetch and throw away an instance of B to make sure it is loaded B.getInstance(); } static void main(String[]

在进入类
A
main()
方法之前,是否有任何方法可以强制对某个类
B
进行静态初始化,而不必更改类
A
,只使用VM选项?

我不知道有什么方法可以不使用代码进行初始化。在代码中,这当然很容易

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

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

你可以创建一个初始化其他类的类,然后调用真正的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 });
}
publicstaticvoidmain(字符串[]args)引发异常{
Class mainClass=Class.forName(System.getProperty(“mainClass”);
for(字符串类名称:System.getProperty(“initClasses”).split(“;”)){
Class.forName(className);
}
方法main=mainClass.getMethod(“main”,字符串[].class);
invoke(null,新对象[]{args});
}

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

更好地解释您试图实现的目标。虽然没有虚拟机选项(有什么用?),但我只是想知道是否有一种方法可以做到这一点。不,这是你感到奇怪的原因。告诉我们原因。谢谢回复。我没有考虑使用其他类的选项,所以它可能会有帮助。