try{
//code A
}catch(Exception e){
//code B
e.printStackTrace();
}finally{
//code C
}如果code A抛异常,code B就会执行;如果code A不抛异常,code B就不会执行。
那finally的code C呢?code A抛不抛异常都要执行的么?
如果答案是肯定的话,如果不抛异常,先执行code A再执行code C
可是如果抛异常,是先执行code B还是code C?
//code A
}catch(Exception e){
//code B
e.printStackTrace();
}finally{
//code C
}如果code A抛异常,code B就会执行;如果code A不抛异常,code B就不会执行。
那finally的code C呢?code A抛不抛异常都要执行的么?
如果答案是肯定的话,如果不抛异常,先执行code A再执行code C
可是如果抛异常,是先执行code B还是code C?
//throw new Exception(); 注释取消和加上 就是2中情况了
System.out.println("a");
return "A";
}catch(Exception e){
System.out.println("b");
return "B";
}finally{
System.out.println("c");
}
所以这个try-catch-finally编译后类似于下面这样:try{
//code A
//code C
}catch(Exception e){
//code B
e.printStackTrace();
//code C
}
try{
//code A
return value;
}catch(Exception e){
//code B
e.printStackTrace();
}finally{
//code C
}