I have a program as following:
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") ;
        }
    }
}
after run above program , following result saw in console:
finally
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.test(Main.java:17)
    at Main.main(Main.java:7)
this behavior is normal because exception thrown to main method.
Then I change code as following :
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;
        }
    }
} 
When run above program I saw following result in console:
finally
after call , res = 20
My question related to second format. Why when return in finally block , exception not thrown to main method?
 
     
     
     
     
     
     
     
     
     
     
     
    
 
    