A constructor has to be at least protected or even private while creating, for example, custom factory classes, like:
public final class MyFactory {
private MyFactory(){} // this one prevents instances of your factory
}
public static void doSomething(){} // access that with MyFactory.doSomething
Note that this is only one example showing when a constructor shouldn't be public.