大家下午好

我想知道是否即使没有引用类本身也可以使类的静态块运行?

我知道它是延迟加载的,因此只需调用该类的任何函数即可开始初始化该类,

但是,我希望在任何调用之前启动该类,换句话说,无论是否引用它,我都希望它在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/

10-12 00:23
查看更多