Oggi al college abbiamo parlato un po 'di try
, catch
e finally
. Mi sono confuso su questi due esempi:Infine a volte mi confondo
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
} finally { // And we close it here
out.close();
}
Qual è la differenza tra la chiusura del file in finally
e se abbiamo appena fatto in questo modo:
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
}
out.close();
Questo pezzo di codice dopo cattura sarà sempre eseguire.
Potete darmi alcuni buoni esempi sulle differenze tra quando usiamo finally
e quando inseriamo il codice dopo la cattura? So che alla fine verrà sempre eseguito, ma il programma continuerà a funzionare anche dopo il blocco catch.
E se la tua cattura ha fatto qualcosa come lanciare un'altra (possibilmente non controllata) eccezione? Sarebbe 'out.close()' eseguito in quella situazione? In altre parole, la semplice stampa della traccia dello stack e lo spostamento non sono sempre il modo in cui viene gestita un'eccezione. – rmlan
Se si lancia nuovamente l'eccezione o non si cattura tutto, il blocco finale è tuo amico. Esistono anche condizioni Throwable che non sono Eccezioni, e quindi il 2 ° esempio sarebbe problematico. – KevinO
Sto per iniziare a conoscere Throwable, quindi credo che dovrò imparare prima a capire questo, giusto? –