通过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});
}
然后以该类作为主类启动应用程序,并指定真正的主类以及通过属性初始化的类。更好地解释您试图实现的目标。虽然没有虚拟机选项(有什么用?),但我只是想知道是否有一种方法可以做到这一点。不,这是你感到奇怪的原因。告诉我们原因。谢谢回复。我没有考虑使用其他类的选项,所以它可能会有帮助。