Próbuję zrozumieć, jak działa przepływ zadań try-catch-finally
. Istnieje kilka rozwiązań od użytkowników Stack Overflow dotyczących ich przepływu wykonania.Ostateczna kolejność wykonywania poleceń wydaje się być losowa.
Jednym z takich przykładów jest:
try { // ... some code: A } catch(...) { // ... exception code: B } finally { // finally code: C }
kod A ma być wykonana. Jeśli wszystko pójdzie dobrze (to znaczy nie zostaną wysłane żadne wyjątki podczas wykonywania A), przejdzie ono do
finally
, więc kod C zostanie wykonany. Jeśli jest wyjątek, podczas gdy jest wykonywany, a następnie przejdzie do B, a następnie w końcu do C.
Jednak mam inny wykonanie przepływa gdy próbowałem go:
try {
int a=4;
int b=0;
int c=a/b;
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally {
System.out.println("common");
}
Dostaję dwa różne wyjścia:
Najpierw wyjściowe:
java.lang.ArithmeticException:/by zero
at substrings.main(substrings.java:15)
lication.AppMain.main(AppMain.java:140)
common
Howev er, kiedy prowadził ten sam program po raz drugi:
Drugie wyjście:
common
java.lang.ArithmeticException:/by zero
at substrings.main(substrings.java:15)
Co mam z tego wywnioskować? Czy to będzie losowe?
Jakikolwiek wynik, ale nie powinien być losowy. Sprawdź krzyż. –
Różne strumienie systemowe produkują nieprawidłowo sformatowane wyjście. –
Czy próbowałeś dołączyć debugger i przejść przez kod? – iceman