Archiwum

Posty oznaczone ‘finally’

Wyjątki w Javie

Często w Javie operuje się na strumieniach danych. Operacje na nich są analogiczne do poniższej metody:

public static void checkedException() throws IOException {
    try {
        System.out.println("1");
        throw new IOException("Exception 1");
    } catch (FileNotFoundException e) {
        System.out.println("2");
        throw new IOException("Exception 2");
    } catch (IOException e) {
        System.out.println("3");
        throw e;
    } finally {
        System.out.println("4");
        throw new IOException("Exception 4");
    }
}

W bloku finally strumienie są zamykane, lecz metoda close() może wyrzucić wyjątek IOException.  Wywołanie poniższej metody:

try {
    checkedException();
} catch (IOException e) {
    System.out.println(e.getMessage());
}

wypisze na konsoli:

1
3
4
Exception 4

Można by przypuszczać, że wypisany zostanie “Exception 1″, jednak jako ostatni wyrzucony zostaje wyjątek w bloku finally i to on jest przekazywany dalej. Podobna sytuacja dotyczy zwracania wartości w bloku finally.

Kategorie:Java Tagi:, ,