为什么是class.forname(“bumptest”),而不是bumptest.class?

t3psigkw  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(358)

在jls第8.4.3.6节中, synchronized 方法,它说:

class BumpTest {
    // ...
    static synchronized void classBump() {
        classCount++;
    }
}

与以下效果完全相同:

class BumpTest {
    // ...
    static void classBump() {
        try {
            synchronized (Class.forName("BumpTest")) {
                classCount++;
            }
        } catch (ClassNotFoundException e) {}
    }
}

这在我看来很奇怪,更不用说太复杂了:为什么要用 Class.forName("BumpTest") ,不是 BumpTest.class ? 不可能 BumpTest 没有加载,因为它毕竟是在执行该类的代码。把它写下来 ClassNotFoundException 必须被抓住并吞下。
这样写有什么特别的原因吗?

3pvhb19x

3pvhb19x1#

它似乎只是一个非常非常古老的例子,比类文字还要古老。在引入类文字之前,JLS1.0中也出现了相同的示例。

相关问题