Не пойманное исключение RuntimeException и пункт finally: что приходит первым?

Исключение RuntimeException выбрасывается в try блоке, не будучи пойманным, а finally пункт вызывает System.exit().

public static void main(String[] args) {
    try {
        Integer.valueOf("NotANumber");
    } finally {
        System.out.println("finally");
        System.exit(0);
    }
}

На выходе получается

finally

Если из finally убрать System.exit(0), то получится

finally
Exception in thread "main" java.lang.NumberFormatException: For input string: "NotANumber"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:449)
    at java.lang.Integer.valueOf(Integer.java:554)
    at exception.MyExcepTest.main(MyExcepTest.java:20)

Где "finally" может появиться до, после или между действиями NumberFormatException.

Кто-нибудь может это объяснить?

12
задан chance 24 November 2011 в 10:09
поделиться