When you create a class and don't define any constructors, Java adds a default, no-arg (parameterless) constructor. But if you later add any constructors to your class, this default constuctor is no longer added automatically.
Download the two .java
files below
and compile them both.
There should be no error when compiling or running.
Next remove the outer comments in Widget.java and recompile.
This should work but generate a run-time exception!
If you try to recompile WidgetTest.java, that will not work.
Once you define any constructors yourself you need to add back the no-arg constructor if you want it. Un-comment out that constructor in Widget.java and everything should work again.
class Widget { String name; /* public Widget ( String name ) { this.name = name; } // public Widget () {} */ }
class WidgetTest { public static void main ( String [] args ) { Widget w = new Widget(); // invokes no-arg constructor System.out.println( "Done constructing a widget!" ); } }