 <p>It is very simple</p> <p>Let me make you understand</p> <p>first</p> <pre><code>public MyClass() { } </code></pre> <p>is simply a default public constructor</p> <p>But when you write this</p> <pre><code>public MyClass() { this(); } </code></pre> <p>that means you are applying constructor chaining. Constructor Chaining is simply calling another constructor of the same class. This must be the first statement of the Constructor. But in your scenario you are passing nothing in <code>this();</code> that means you are again calling the same constructor which will result in infinite loop. your class may have another constructor like this</p> <pre><code>public MyClass(int a) { } </code></pre> <p>then you may have called this</p> <pre><code>public MyClass(){ this(10); } </code></pre> <p>the above statement will make you to jump to the constructor receiving the same arguments that you have passed</p> <p>Now,</p> <pre><code>public Myclass(){ super(); } </code></pre> <p>signifies that you are calling the constructor of the super class which is inherited by the class <code>MyClass</code>. the same scenario occurs here, you have passed nothing in the <code>super();</code> which will call the default constructor of the Super class.</p>