Mam program w następujący sposób:try/finally bez połowu i powrotnej wartości
public class Main {
public static void main(String[] args)throws Exception
{
int res = test();
System.out.println("after call , res = " + res) ;
}
public static int test()throws Exception
{
try
{
return 10/0;
}
finally
{
System.out.println("finally") ;
}
}
}
po biegu powyższego programu, następujący wynik widział w konsoli:
finally
Exception in thread "main" java.lang.ArithmeticException:/by zero
at Main.test(Main.java:17)
at Main.main(Main.java:7)
to zachowanie jest normalne, bo wyjątek rzucony do głównej metody.
Potem zmienić kod w następujący sposób:
public class Main {
public static void main(String[] args)throws Exception
{
int res = test();
System.out.println("after call , res = " + res) ;
}
public static int test()throws Exception
{
try
{
return 10/0;
}
finally
{
System.out.println("finally") ;
return 20;
}
}
}
Po uruchomieniu powyższego programu Widziałem następujący wynik w konsoli:
finally
after call , res = 20
Moje pytanie związane z drugim formatem. Dlaczego po powrocie w końcu bloku, wyjątek nie rzucony do głównej metody?
@Tunaki Nie to. –
Ten może: http://stackoverflow.com/q/48088/1743880? – Tunaki
Proszę spojrzeć: http://stackoverflow.com/questions/48088/returning-from-a-finally-block-in-java – Rehman