У меня есть программа следующим образом:попытка/наконец без улова и возвращаемого значения
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") ;
}
}
}
после запуска указанной программы, следующий результат увидел в консоли:
finally
Exception in thread "main" java.lang.ArithmeticException:/by zero
at Main.test(Main.java:17)
at Main.main(Main.java:7)
это поведение нормально, потому что исключение брошено к основному методу.
Затем я изменяю код следующим образом:
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;
}
}
}
При запуске программы выше я увидел следующий результат в консоли:
finally
after call , res = 20
Мой вопрос, связанный со вторым форматом. Почему при возврате в блок finally исключение не выбрасывается в основной метод?
@Tunaki Не то. –
Возможно, это возможно: http://stackoverflow.com/q/48088/1743880? – Tunaki
Пожалуйста, посмотрите: http://stackoverflow.com/questions/48088/returning-from-a-finally-block-in-java – Rehman