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

标签 java language-specifications

JLS Sec 8.4.3.6, synchronized methods ,它说:

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

has exactly the same effect as:

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

这对我来说很奇怪,更不用说过于复杂了:为什么使用 Class.forName("BumpTest"),而不是 BumpTest.classBumpTest 不可能没有加载,因为毕竟它正在执行该类的代码。并按原样编写,必须捕获并吞下已检查的 ClassNotFoundException

这样写有什么特别的理由吗?

最佳答案

它看起来只是一个非常非常古老的例子,比类文字更古老。同样的例子出现在 JLS 1.0 中。 ,在引入类文字之前。

关于java - 为什么是 Class.forName ("BumpTest"),而不是 BumpTest.class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044310/

相关文章:

f# - F# 语言引用文档是否以离线格式(PDF、CHM)提供?

java - 如何使用Spring JPA查询名称约定来查询通配符

java - 在 Java 中复制嵌套对象

java - 如何从原始类文件中找出依赖的类?

c# - 为什么 C# 在 while 循环中也不允许空条件?

java - 我在哪里可以获得 Java 8 语言规范?

java - 多线程——共享数据

java - 并发收集先发生关系

java - 如果添加null,ArrayList会动态增长吗?

c# - foreach在C#中是如何实现的?