大家下午好
我想知道是否即使没有引用类本身也可以使类的静态块运行?
我知道它是延迟加载的,因此只需调用该类的任何函数即可开始初始化该类,
但是,我希望在任何调用之前启动该类,换句话说,无论是否引用它,我都希望它在JVM start上运行。
Preloading java classes/libraries at jar startup提出了一种解决方法,但这并不是我正在寻找的解决方案(基本上我不想做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()
方法。关于java - 我们如何在JVM启动时立即加载类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9228938/