 <p>Another example in JDK - <code>java.lang.Throwable</code></p> <pre><code>private Throwable cause = this; </code></pre> <p>The <code>cause</code> field can be in 3 states - unset; set to null; set to another Throwable. </p> <p>The implementer uses <code>this</code> to represent the <em>unset</em> state.</p> <p>A more readable strategy is probably to define a sentinel value for <em>unset</em></p> <pre><code>static Throwable UNSET = new Throwable(); private Throwable cause = UNSET; </code></pre> <p>of course, there's a recursive dependency - <code>UNSET.cause=?</code> - which is another fun topic.</p>