为什么Class.forName(" BumpTest"),而不是BumpTest.class?

时间:2017-10-31 20:47:59

标签: java language-specifications

JLS Sec 8.4.3.6, synchronized methods中,它说:

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.classBumpTest无法加载,因为它毕竟是从该类执行代码。并按原样编写,检查ClassNotFoundException必须被捕获并吞下。

有没有特别的理由以这种方式写它?

1 个答案:

答案 0 :(得分:3)

它似乎只是一个真正的,非常古老的例子,比类文字更早。在引入类文字之前,JLS 1.0中出现了相同的示例。