When you start working with
J2EE, you have a delicate balance between the specification (the API) and the actual implementation, which is provided by a specific application server. When you write a servlet, it is instantiated by the application server, not you. It is therefore not a good practice to override the default constructor, because you don't know what state other objects will be in when it is instantiated. The recommended practice is to place once-only code in the servlet's init() method and not override the constructor.
In terms of pure
Java, though, Ernest is right: there is always a constructor, either provided by you or the compiler.