所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception。
1 import java.io.IOException;
2
3 public class Test {
4
5 public static void main(String[] args) {
6 System.out.println("returning result is " + testException());
7 }
8
9 public static int testException(){
10 int i = 1 ;
11 try{
12 throw new IOException() ;
13 }catch(Exception e){
14 System.out.println("catch it !");
15 return i;
16 }finally{
17 i = 2 ;
18 System.out.println("finally ok") ;
19 System.out.println("i = " + i) ;
20 //return i ;
21 }
22 }
23 }
当第20行的return语句注释掉时,输出的结果是 catch it ! finally ok i = 2 returning result is 1 同时也表明如果try 或 catch 中有return语句,则在进入finally之前,Java的中间缓存变量机制已经将try 或 catch 中返回的结果进行了缓存,执行完finally中的语句后,直接将缓存结果return,而当finally中有return语句时,则直接return当前的结果即可。 当第20行的return语句没有注释掉时,输出的结果是 catch it ! finally ok i = 2 returning result is 2