In JLS Sec 8.4.3.6, synchronized
methods, it says:
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) {} } }
This looks odd to me, not to mention over-complicated: why use Class.forName("BumpTest")
, not BumpTest.class
? It's not possible that BumpTest
isn't loaded, because it's executing code from that class, after all. And writing it as it is, the checked ClassNotFoundException
has to be caught and swallowed.
Is there a particular reason to write it in this way?
BumpTest.class
instead ofClass.forName
? Have you tried it? Maybe their example is not the best one – Undaunted