Think about what you're doing here: you're calling a private method from a method inside the class containing that method. That's allowed... Try creating an instance from OUTSIDE the class, there's only 1 way to do that (and that way isn't covered by the SCJP exam).
As a matter of good form, a class with only private constructors should be declared final.
The statement "a private constructor prevents instantiation" is incorrect, particularly when being assimilated to an abstract class. A better statement might be "a private constructor prevents instantiation from outside of the enclosing class, unless it is a nested class, in which case, instantiation is prevented from anywhere outside of the enclosing top-level class (since a synthetic class is created)".
[ February 21, 2005: Message edited by: William Goldsworthy ]
Increasingly, people seem to misinterpret complexity as sophistication, which is baffling - the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user. Niklaus Wirth
Joined: Sep 24, 2003
.. and even then it's only singleton across a class loader.
In any case, the use of singleton implies a design flaw. There is always (yes, always, not almost always) a better way. GoF set a precedent for expansion, not a religion to be followed by the blind.