在Java中,如何在加载或卸载类时运行静态方法?

use*_*440 2 java static jvm classloader

我有一个使用静态方法来包装远程API调用的类.

一般来说,我不希望我的API服务器一直"监听"这些调用,而只是在程序使用该类时才监听.所以我需要一种方法告诉服务器在类加载时"唤醒"(我发送"唤醒"消息的方式是无关紧要的).

我知道我可以在调用第一个类方法时唤醒服务器,但是我希望它在类加载到正在运行的程序后立即就绪(即使它是懒惰加载的).

此外,知道何时不再使用该类会很好,所以我可以告诉服务器重新入睡.

基本上,我正在寻找整个班级的"构造者"和"终结者".可以这样做吗?

编辑:我忘了提到一个非常重要的事情,我不能让用户使用公共静态方法或类似的东西手动初始化/完成类.这堂课需要像普通的本地班级一样.

ski*_*iwi 6

您可以使用静态初始化块:

class YourClass {
    static {
        System.out.println("I got loaded!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在JVM加载类时调用.

对于卸载部分,一种方法(neccessarilly not best)是在静态初始化器中启动一个定时器,在该初始化器中,在一段时间不使用之后关闭资源.使用将由被调用的构造函数或类似的东西指示,但实现并发问题可能很棘手.

另一种方法是编写自定义类加载器.