Java基础——try/catch/finally+return
2018-03-21 19:52
441 查看
当try、catch、finally中都有return时,程序是怎么执行的?
看下面的例子:
这是运行结果:
说明最后程序还是从finally中的return返回。
这个问题还可以有很多种情形,下面来分析一下:
因为finally中的代码一定会执行,所以如果finally中有return时,一定从finally中返回,而且如果编写代码时如果在finally外面加return,程序还会报错。具体的分一下几种情形:
try{}catch{}finally{}return;按顺序执行;
try{}catch{}finally{return};按顺序执行;不能在finally外加return,会报错
try{return1}catch{}finally{return2}:没有异常时,先执行到return1之前,再执行finally,从finally返回;有异常时,会执行catch块,最后还是从finally返回
try{return}catch{}finally{}:先执行到return之前,任然还会执行finally,最后去执行return,return的是try中的值
try{return1}catch{return2}finally{}:try中没有异常,从try中返回,有异常从catch中返回,finally总会执行;
总结:1.finally总是会执行2.finally中有return就总是从finally返回;3.若finally中没有return,就按顺序执行,有异常就从catch中返回,没有异常就从try中返回。
看下面两个最重要的情形:
结果:因为有异常,所以从catch中返回返回的值还是catch中的3,虽然finally执行了,但是返回时是将3暂存在临时变量中的,最后从这个返回值中取。
结果:没有异常时,从try中返回,看出执行顺序是try-finally-return,最后return的值是try中的值。
看下面的例子:
public static int test() { int i = 1; try { i = 2; System.out.println("try...."); int j = i / 0; System.out.println(j); return ++i; } catch (Exception e) { i = 3; System.out.println("catch.."); return i; }finally { i = 4; System.out.println("finally..."); return i; } }
这是运行结果:
try.... catch.. finally... 4
说明最后程序还是从finally中的return返回。
这个问题还可以有很多种情形,下面来分析一下:
因为finally中的代码一定会执行,所以如果finally中有return时,一定从finally中返回,而且如果编写代码时如果在finally外面加return,程序还会报错。具体的分一下几种情形:
try{}catch{}finally{}return;按顺序执行;
try{}catch{}finally{return};按顺序执行;不能在finally外加return,会报错
try{return1}catch{}finally{return2}:没有异常时,先执行到return1之前,再执行finally,从finally返回;有异常时,会执行catch块,最后还是从finally返回
try{return}catch{}finally{}:先执行到return之前,任然还会执行finally,最后去执行return,return的是try中的值
try{return1}catch{return2}finally{}:try中没有异常,从try中返回,有异常从catch中返回,finally总会执行;
总结:1.finally总是会执行2.finally中有return就总是从finally返回;3.若finally中没有return,就按顺序执行,有异常就从catch中返回,没有异常就从try中返回。
看下面两个最重要的情形:
public static int test() { int i = 1; try { i = 2; System.out.println("try...."); int j = i / 0; System.out.println(j); return i; } catch (Exception e) { i = 3; System.out.println("catch.."); return i; }finally { i = 4; System.out.println("finally..."); //return i; } }
结果:因为有异常,所以从catch中返回返回的值还是catch中的3,虽然finally执行了,但是返回时是将3暂存在临时变量中的,最后从这个返回值中取。
try.... catch.. finally... 3
public static int test() { int i = 1; try { i = 2; System.out.println("try...."); return i; } catch (Exception e) { i = 3; System.out.println("catch.."); return i; }finally { i = 4; System.out.println("finally..."); } }
结果:没有异常时,从try中返回,看出执行顺序是try-finally-return,最后return的值是try中的值。
try.... finally... 2
相关文章推荐
- java基础知识之(==与equals,try catch finally return ,装箱与拆箱)
- java基础之try,catch,finally中的return
- 【Java基础之finally和return】有return的情况下try catch finally的执行顺序
- java基础学习之try catch finally语句中含有return语句的执行情况
- Android面试之java基础try-catch-finally-return的执行先后顺序问题
- java基础之try-catch-finally
- Head First Java: Java 里面的 try、catch、finally 与 return
- Java中try catch finally语句中含有return语句的执行情况(总结版)
- java中try-catch-finally中的return语句
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- java中try catch finally与return的执行顺序
- JAVA基础再回首(十九)——异常的概述、Try…Catch、多异常处理、Throws、throw、finally、自定义异常及异常的注意事项
- Java异常处理机制以及try-catch-finally-return执行顺序
- Java-有return的情况下try catch finally的执行顺序(最有说服力的总结)
- Java中try-catch-finally-return的执行顺序
- Java基础教程39-异常-try-catch-finally
- Java-try_catch_finally中带有return语句的执行顺序
- java中try catch finally ,try有return,finally还执行吗?
- JAVA中try,catch,finally的return研究