在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
必须被捕获并吞下。
有没有特别的理由以这种方式写它?