 <p>In your no-arg constructor, the line </p> <pre><code> this(2.5, 1, 1000); </code></pre> <p>explicitly means "call another constructor for the same class as the current constructor, but which takes these arguments".</p> <p>So that's why adding the other constructor fixes the problem. The order in which you pass the arguments needs to match the order in which the parameters appear on that constructor, that constructor's parameter list defines the order you need to put the arguments in when calling it.</p> <p>The relationship between these two constructors is that they are chained. The one with the 3 arguments is the primary constructor, the other calls the primary constructor with default values. Designing constructors in this way helps to initialize your objects consistently, because a single primary constructor always gets called. (For instance, the loanDate instance field gets set regardless of which constructor you call.)</p>