当try、catch、finally遭遇return
2014-01-27 13:29
211 查看
以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例。
掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。
原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。
2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。
3、函数必须确保有唯一返回值
说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。
4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。
下面通过例子讲解上面的三条原则
结果:
try1
finally4
4
说明:try中执行完输出后,由于其return优先级并不最高,所以不会返回,继续执行finally语句块并返回
结果:
catch2
finally5
5
转自:http://hi.baidu.com/cloudcomputing/item/7d6bf09c2bec73f628164729
掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。
原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。
2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。
3、函数必须确保有唯一返回值
说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。
4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。
下面通过例子讲解上面的三条原则
public class TestReturn { public static void main(String[] args) { TestReturn t1 = new TestReturn(); int k = 0; System.out.println(t1.test1(k)); } public int test1 (int k) { try { k = k + 1; System.out.println("try"+ k); return k; } catch (Exception e) { k = k + 2; System.out.println("catch"+ k); return k; } finally { k = k + 3; System.out.println("finally"+ k); return k; } } }
结果:
try1
finally4
4
说明:try中执行完输出后,由于其return优先级并不最高,所以不会返回,继续执行finally语句块并返回
public class TestReturn { public static void main(String[] args) { TestReturn t1 = new TestReturn(); int k = 0; System.out.println(t1.test1(k)); } public int test1 (int k) { try { throw new Exception(); } catch (Exception e) { k = k + 2; System.out.println("catch"+ k); return k; } finally { k = k + 3; System.out.println("finally"+ k); return k; } } }
结果:
catch2
finally5
5
转自:http://hi.baidu.com/cloudcomputing/item/7d6bf09c2bec73f628164729
相关文章推荐
- try catch finally与return的执行顺序
- try catch finally与return的执行顺序
- Try,Catch,Finally三块中如果有Return是怎么个运行顺序
- 关于try、catch、finally语句块中含有return语句的几点说明
- 关于java中的try-catch-finally语句和return
- try{ return } - catch{}-finally{} 执行情况,内部解析
- try catch finally return 的执行顺序
- TRY--CATCH--FINALLY中RETURN返回值执行的顺序(区别)
- JAVA中try,catch,finally的return研究
- 异常处理及try/catch/finally/return 的执行顺序:
- 有return的情况下try catch finally的执行顺序
- try catch finally return之间的关系
- 谈论try,catch,语句中的return语句与后面的finally中语句谁先执行的问题
- try catch finally里面出现return时候的结果
- try——catch——finally使用return的顺序
- 有return的情况下try catch finally的执行顺序
- try、catch、finally、return的执行顺序
- 当try/catch...finally遇上return
- 有return的情况下try catch finally的执行顺序
- try catch finally语块中有return语句的各种情况