在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.class
? BumpTest
不可能没有加载,因为毕竟它正在执行该类的代码。并按原样编写,必须捕获并吞下已检查的 ClassNotFoundException
。
这样写有什么特别的理由吗?
最佳答案
它看起来只是一个非常非常古老的例子,比类文字更古老。同样的例子出现在 JLS 1.0 中。 ,在引入类文字之前。
关于java - 为什么是 Class.forName ("BumpTest"),而不是 BumpTest.class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044310/