Constructor is not very fortunate name. It may suggest that it is responsible for creating (constructing) object, but in reality it is responsible for initialization of already existing object.
Object is created by new
operator. But that object is "set up" to have all its fields filled with default values: null, false, 0 (depending on type). To make such object usable in our application we need to "set it up" (initialize) properly and that is the job of constructor.
But since classes can extend other classes it is required from constructors of subclass to execute its code only after execution of constructor of superclass (for instance to make sure that all inherited fields are properly initialized so we could use in our constructor inherited methods which actually use those superclass fields). Which is why super(..)
call is placed explicitly or implicitly at start of every constructor (except Object
class since it doesn't extend other class).