大家下午好,
我想知道有没有办法让类的静态块运行,即使类本身没有被引用?
我知道它是惰性加载的,因此只需调用该类的任何函数就会开始启动该类
然而,我希望类在任何调用之前启动,换句话说,我希望它在JVM启动时运行,而不管它是否被引用。
在jar启动时预加载java类/库提出了一个解决方案,但这并不是我真正想要的解决方案(基本上我不想做Class.forName
,我希望它在JVM启动时完成)
我们该怎么做呢?
如果有办法做到这一点,可能需要使用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()
方法。