Is there any way to force static initialization of some class B
before entering the main()
method of class A
, without changing class A
, using only VM options?
Asked
Active
Viewed 118 times
1
-
1Explain better what you're trying to achieve. There's no VM option for that (what would be the use?) though. – Kayaman Jan 06 '14 at 14:32
-
I just wonder if there is a way to do so. – FireFry Jan 06 '14 at 15:31
-
3No, there's a reason why you wonder that. Tell us the reason. – Kayaman Jan 06 '14 at 16:03
2 Answers
1
I'm not aware of any way to do it without code. In code it's easy of course.
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);
}
}
In fact you could just do
public class C {
static void main(String[] args) {
B.getInstance();
A.main(args);
}
}
Your request doesn't make a lot of sense though. Ask a question about the problem you are trying to solve by doing this and you will hopefully get a much more useful answer.

Tim B
- 40,716
- 16
- 83
- 128
-
Thanks for reply. I didn't consider the option to use other class so it might be helpful. – FireFry Jan 06 '14 at 15:22
0
you could create a class that initializes other classes and then calls the real main method, e.g:
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 });
}
Then you would start the application with that class as the main class and specify the real main class and the classes to be initialized via properties.

Blank Chisui
- 1,043
- 10
- 25