为什么是 Class.forName("BumpTest"),而不是 BumpTest.class?
Why Class.forName("BumpTest"), not BumpTest.class?
在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
不可能没有加载,因为毕竟它正在执行来自 class 的代码。而且照原样写,checkedClassNotFoundException
还得抓着吞
这样写有什么特殊原因吗?
它似乎只是一个非常非常古老的例子,比 class 文字更古老。在引入 class 文字之前,相同的示例出现在 JLS 1.0 中。
在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
不可能没有加载,因为毕竟它正在执行来自 class 的代码。而且照原样写,checkedClassNotFoundException
还得抓着吞
这样写有什么特殊原因吗?
它似乎只是一个非常非常古老的例子,比 class 文字更古老。在引入 class 文字之前,相同的示例出现在 JLS 1.0 中。