У меня есть следующая программа:
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 исключение не выбрасывается в основной метод?