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?
-
1Explain better what you're trying to achieve. There's no VM option for that (what would be the use?) though.Kayaman– Kayaman2014-01-06 14:32:48 +00:00Commented Jan 6, 2014 at 14:32
-
I just wonder if there is a way to do so.FireFry– FireFry2014-01-06 15:31:12 +00:00Commented Jan 6, 2014 at 15:31
-
3No, there's a reason why you wonder that. Tell us the reason.Kayaman– Kayaman2014-01-06 16:03:42 +00:00Commented Jan 6, 2014 at 16:03
Add a comment
|
2 Answers
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.
1 Comment
FireFry
Thanks for reply. I didn't consider the option to use other class so it might be helpful.
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.