This almost seems too obvious to be worth stating, but the principle is simple, and the error is made often... 

If you have more than one constructor on a class, always forward from the least specific to the most specific - thus

	public Foo( String param )
	{
	this( param , DEFAULT_VALUE );
	}

	public Foo( String param , int value )
	{
	this( param , value , new LinkedList( ) );
	}

	public Foo( String param , int value , List items )
	{
	this.param = param;
	this.value = value;
	this.items = items;
	}

I quite often come across this though:

	public Foo( String param )
	{
	this.param = param;
	this.value = DEFAULT_VALUE;
	}

	public Foo( String param , int value )
	{
	this( param );
	this.value = value;	
	}

	public Foo( String param , int value , List items )
	{
	this( param );	
	this.items = items;
	}

See?  Absolutely chock full of subtle errors and disproportionately difficult to refactor.

If this absolutely cannot be done, then at least put  static make( ) methods
onto the class, limit yourself to one constructor and make it private.

--ShaunSmith

''To have your cake and eat it too, stick to the static methods, and give them descriptive names.''