2011-06-30 17 views
9

W readFileMethod1, IOException jest jawnie przechwytywany przed wyrzuceniem go na poziomie metody, aby zapewnić wykonanie bloku finally. Czy jest jednak konieczne złapanie wyjątku? Jeśli usunę blok catch, pokazany w readFileMethod2, czy blok finally zostanie również wykonany?Java w końcu blokuje i zgłasza wyjątek na poziomie metody

private void readFileMethod1() throws IOException { 
    try { 
     // do some IO stuff 
    } catch (IOException ex) { 
     throw ex; 
    } finally { 
     // release resources 
    } 
} 

private void readFileMethod2() throws IOException { 
    try { 
     // do some IO stuff 
    } finally { 
     // release resources 
    } 
} 
+0

Już miałem zadać to pytanie. Pamiętaj. – JohnMerlino

Odpowiedz

7

finally nadal pobiera wykonywane niezależnie od tego, czy złapać IOException. Jeśli cały blok catch'a zostanie ponownie rzucony, nie jest to konieczne.

4

Nie, całkowicie nie trzeba wychwytywać wyjątków, jeśli nie zamierzasz zrobić nic poza wyrzuceniem.

I tak, blok finally będzie nadal wykonywany.

2

Nie, nie jest konieczne wychwycenie wyjątku, chyba że nie można go ponownie użyć w swojej metodzie. W opublikowanym przez ciebie kodzie readFileMethod2 jest właściwą opcją do naśladowania.

1

wreszcie jest wykonywany zawsze, niezależnie od tego, czy jest wyjątek, czy nie. Tylko wtedy, gdy maszyna JVM zostanie wyłączona podczas wykonywania bloku try lub catch, wówczas klauzula finally nie zostanie wykonana. Podobnie, jeśli wątek wykonujący kod try lub catch zostanie przerwany lub zabity, blok finally może nie zostać wykonany, nawet jeśli aplikacja działa jako całość.

Powiązane problemy