Immutable objects have fixed state (no setters), so all state must be known at object creation time.
Although not technically required, it is best practice to make all fields final
. This will make the immutable class thread-safe (cf. Java Concurrency in Practice, 3.4.1).
The examples show several patterns that can assist with achieving this.