1 try catch finally语句基础知识 spa
2 try catch finally语句与return语句 3d
一、finally块必定会被执行。即便已经执行了return语句。code
例:blog
public class Test{ public static String func(){ Integer i=0; try{ System.out.println("执行try语句块");//1 return i.toString();//2 }finally{ System.out.println("开始执行finally语句块,i的值为:"+i);//3 i++;//4 System.out.println("结束执行finally语句块,i的值为:"+i);//5 } } public static void main(String[] args) { System.out.println("开始执行main");//0 System.out.println("执行func的结果为:"+func());//5 System.out.println("结束执行main");//6 }
}
输出:编译器
开始执行main
执行try语句块
开始执行finally语句块,i的值为:0
结束执行finally语句块,i的值为:1
执行func的结果为:0
结束执行main
从该例可看出,外层代码先获取方法的返回值,等待方法内部finally语句执行结束后,外层方法继续执行。即try、catch、finally语句中,执行return后,对当前返回的值作任何的修改,都不影响已经return的返回值。io
二、try块中有return语句,catch块中也必须有return语句。不然没法经过编译。编译
return语句在try-catch-finally块以前。显然这会提示异常,提示去除try{}catch(){}finally{}块。class
因为return通常都处于代码块执行的最后。因此若try块抛出异常,则return语句确定还未执行。异常被catch捕获,catch必须完成try没有完成的return。基础
三、若是finally块中有return 语句,则返回try或catch中的返回语句忽略。方法
public class TryCatchFinally {
static int method(){
try{
return 0;
}catch(Exception e){
return 1;
}finally{
System.out.println("finally{}");
return 2;
}
}
public static void main(String[] args) {
int i = method();
System.out.println(i);
}
}
输出:
finally{}
2
finally中有return语句,编译器会提示警告。
3 使用try、catch、finally语句块中须要注意
一、尽可能在try或者catch中使用return语句。经过finally块中达到对try或者catch返回值修改是不可行的。
二、finally块中避免使用return语句。由于finally块中使用return语句会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生。
三、finally块中避免再次抛出异常。不然整个包含try语句块的方法回抛出异常,而且会消化掉try、catch块中的异常。