Учитывая эту программу:
class Test {
    public static void main(String[] args) {
        try {
            throw new NullPointerException();
        } catch (NullPointerException npe) {
            System.out.println("In catch");
        } finally {
            System.out.println("In finally");
        }
    }
}
Sun javac (v 1.6.0_24) создает следующий байт-код:
public static void main(java.lang.String[]);
        // Instantiate / throw NPE
   0:   new     #2;         // class NullPointerException
   3:   dup
   4:   invokespecial   #3; // Method NullPointerException."<init>":()V
   7:   athrow
        // Start of catch clause
   8:   astore_1
   9:   getstatic       #4; // Field System.out
   12:  ldc     #5;         // "In catch"
   14:  invokevirtual   #6; // Method PrintStream.println
   17:  getstatic       #4; // Field System.out
        // Inlined finally block
   20:  ldc     #7;         // String In finally
   22:  invokevirtual   #6; // Method PrintStream.println
   25:  goto    39
        // Finally block
        // store "incomming" exception(?)
   28:  astore_2
   29:  getstatic       #4; // Field System.out
   32:  ldc     #7;         // "In finally"
   34:  invokevirtual   #6; // Method PrintStream.println
        // rethrow "incomming" exception
   37:  aload_2
   38:  athrow
   39:  return
Со следующей таблицей исключений:
  Exception table:
   from   to  target type
     0     8     8   Class NullPointerException
     0    17    28   any
    28    29    28   any
 
Мой вопрос:  Почему он включает эту последнюю запись в таблицу исключений?!
Насколько я понимаю, в основном говорится: "Если astore_2 выдает исключение, ловить его и повторять ту же инструкцию".
Такая запись создается даже с пустыми предложениями try/catch/finally, такими как
try {} catch (NullPointerException npe) {} finally {}
Некоторые наблюдения
- Компилятор Eclipse не создает такую запись таблицы исключений
 -  Спецификация JVM не документирует исключения во время выполнения для инструкции 
astore. -  Я знаю, что JVM имеет право бросать 
VirtualMachineErrorдля любой команды. Я предполагаю, что особенная запись предотвращает распространение таких ошибок из этой инструкции.