title: Try-finally block prevents StackOverflowError
body: <p>Take a look at the following two methods:</p>
  
  <pre><code>public static void foo() {
      try {
          foo();
      } finally {
          foo();
      }
  }
  
  public static void bar() {
      bar();
  }
  </code></pre>
  
  <hr>
  
  <p>Running <code>bar()</code> clearly results in a <code>StackOverflowError</code>, but running <code>foo()</code> does not (the program just seems to run indefinitely). <em>Why is that?</em></p>