title: why isn't java.lang.Throwable an abstract class?
body: <p>Possible duplicate: <a href="https://stackoverflow.com/questions/2890311/">why-is-java-lang-throwable-a-class</a></p>
  
  <p>Hi! I doesn't understand why Throwable isn't abstract class. I see only one use case for these: in logging systems for figure out call hierarchy. But it can be some static method for this or other class. So, why?)</p>
  
  <p>Thanks.</p>
  
  <p><strong>upd</strong></p>
  
  <p>from  java.util.logging.LogRecord  </p>
  
  <pre><code>// Get the stack trace.
  StackTraceElement stack[] = (new Throwable()).getStackTrace();
  </code></pre>
  
  <p>Why it can't be <code>Throwable.getStackTrace();</code>  or as in  java.lang.Thread</p>
  
  <pre><code>(new Exception()).getStackTrace();
  </code></pre>
  
  <p>In this way we can avoid <code>throw new Throwable();</code></p>
  
  <p><strong>upd2</strong>
  from javadoc</p>
  
  <blockquote>
    <p>The Throwable class is the superclass
    of all errors and exceptions in the
    Java language.</p>
  </blockquote>
  
  <p>So, as a superclass it should be abstract, imho. Using it for getting stacktrace isn't good case by this definition.</p>