Having a private constructor does not prevent you from making an instance of a class. It only forces you to use a method of the class to create the instance instead of the constructor. The method (which CAN get at the private constructor) then calls the correct constructor and creates it for you.
Of course SUN DIDN'T provide a createMath() method (smart guys
).
If they JUST make the constructor private, we could sub-class Math and add silly math methods to it, and override their good methods with our not so good methods. Not a good idea.
If they JUST make the class FINAL, then we could create an instance of MATH, which doesn't make sense either.
So they did both.