Sto cercando di capire come funziona il flusso di esecuzione try-catch-finally
. Ci sono un paio di soluzioni dagli utenti di Stack Overflow riguardo al loro flusso di esecuzione.L'ordine di esecuzione try-catch-finally sembra essere casuale
Un esempio è:
try { // ... some code: A } catch(...) { // ... exception code: B } finally { // finally code: C }
Codice A sta per essere giustiziato. Se tutto va bene (cioè nessuna eccezione viene generata mentre A è in esecuzione), andrà a
finally
, quindi il codice C sta per essere eseguito. Se viene generata un'eccezione mentre A viene eseguito, quindi andrà a B e infine a C.
Tuttavia, mi sono diversi flussi di esecuzione quando l'ho provato:
try {
int a=4;
int b=0;
int c=a/b;
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally {
System.out.println("common");
}
io sono sempre due uscite differenti:
Prima uscita:
java.lang.ArithmeticException:/by zero
at substrings.main(substrings.java:15)
lication.AppMain.main(AppMain.java:140)
common
Carn ehm, quando mi sono imbattuto lo stesso programma per la seconda volta:
Seconda uscita:
common
java.lang.ArithmeticException:/by zero
at substrings.main(substrings.java:15)
Cosa devo concludere da questo? Sarà casuale?
Qualunque sia il risultato, ma non dovrebbe essere casuale. Controllo incrociato. –
diversi flussi di sistema produce un'output formattato in modo errato –
Si è tentato di collegare un debugger e di eseguire il codice? – iceman