下午好,
我想知道是否有一个类的静态块运行,即使没有引用类本身?
我知道它是懒惰加载的,只需调用该类的任何函数就会启动该类,
但是我希望在任何调用之前启动类,换句话说,我希望它在JVM启动时运行,无论它是否被引用。
Preloading java classes/libraries at jar startup提出了一个解决方法,但它并不是我正在寻找的解决方案(基本上我不想做Class.forName
,我希望它能在JVM启动时完成)
我们将如何去做?
答案 0 :(得分:2)
如果有办法做到这一点,可能会涉及使用JVM选项,这些选项并不完全优雅或完全可移植。
如果只需要在执行实际应用程序代码之前初始化某个类,那么在现有应用程序周围使用包装类可能是一个更干净的选择:
public class LoggedLauncher {
public static void main(String[] args) {
// Do whatever you need to initialize your logging class
//
// e.g. call a static method:
//
// MyLogger.init();
// ...then start your application
MyApplication.main(args);
}
}
您甚至可以使用一些反射,以便可以将应用程序类作为参数提供给包装器,替换硬编码的引用。如果这样做,请不要忘记操作args
数组,以便将正确的参数传递给应用程序的main()
方法。