title: What are the circumstances under which a finally {} block will NOT execute?
body: <p>In a Java <code>try{} ... catch{} ... finally{}</code> block, code within the <code>finally{}</code> is generally considered "guaranteed" to run regardless of what occurs in the try/catch.  However, I know of at least two circumstances under which it will <em>not</em> execute:</p>
  
  <ul>
  <li>If <code>System.exit(0)</code> is called; or,</li>
  <li>if an Exception is thrown all the way up to the JVM and the default behavior occurs (i.e., <code>printStackTrace()</code> and exit)</li>
  </ul>
  
  <p>Are there any other program behaviors that will prevent the code in a <code>finally{}</code> block from executing?  Under what specific conditions will the code execute or not?</p>
  
  <p><strong>EDIT:</strong> As NullUserException pointed out, the second case is actually not true.  I thought it was because the text in standard error printed after that in standard out, preventing the text from being seen without scrolling up. :)  Apologies.</p>