有没有办法B
在进入 class 的main()
方法之前强制静态初始化某些类A
,而不改变 class A
,只使用 VM 选项?
问问题
97 次
2 回答
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);
}
}
不过,您的要求没有多大意义。问一个关于你试图通过这样做来解决的问题的问题,你会希望得到一个更有用的答案。
于 2014-01-06T14:36:38.893 回答
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 });
}
然后,您将使用该类作为主类启动应用程序,并指定真正的主类和要通过属性初始化的类。
于 2014-01-06T21:36:45.633 回答