我们如何在JVM上加载类(直接启动)?

时间:2012-02-10 14:03:23

标签: java jvm

下午好,

我想知道是否有一个类的静态块运行,即使没有引用类本身?

我知道它是懒惰加载的,只需调用该类的任何函数就会启动该类,

但是我希望在任何调用之前启动类,换句话说,我希望它在JVM启动时运行,无论它是否被引用。

Preloading java classes/libraries at jar startup提出了一个解决方法,但它并不是我正在寻找的解决方案(基本上我不想做Class.forName,我希望它能在JVM启动时完成)

我们将如何去做?

1 个答案:

答案 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()方法。