在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
必须被抓住并吞下。
这样写有什么特别的原因吗?
1条答案
按热度按时间3pvhb19x1#
它似乎只是一个非常非常古老的例子,比类文字还要古老。在引入类文字之前,JLS1.0中也出现了相同的示例。