【发布时间】:2017-10-31 20:47:58
【问题描述】:
在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.class? BumpTest 不可能没有加载,毕竟它正在执行该类的代码。并且按原样写,检查的ClassNotFoundException必须被抓住并吞下。
这样写有什么特别的原因吗?
【问题讨论】:
-
也许这个例子早于类文字。我不确定何时引入了类文字。
-
基本上,您是说如果您只使用
BumpTest.class而不是Class.forName?你试过了吗?也许他们的榜样不是最好的 -
@user2357112 你可能是对的:这个例子在the Java 1.0 spec,但没有提到类文字。如果您将其添加为答案,我会接受。
标签: java language-specifications