The VM ensures that a final instance variable is visible after construction. 2. None of the methods can be mutators. You may want to make them final, or declare the class final, so that methods can’t be overridden with mutators. 3. Don’t leak mutable state. None of your (non-private) methods can return a reference to any innards that could be used for mutation. 4. Don’t let the this reference escape in a constructor.