1

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?

Seki
  • 11,135
  • 7
  • 46
  • 70
FireFry
  • 125
  • 6

2 Answers2

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
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