try catch finally,try里有return,finally还执行么?
来源:互联网 发布:mysql syntax 编辑:程序博客网 时间:2024/05/22 14:47
finally是在try的语句执行之后并且try的return返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值,如test1测试代码),return的时候是复制了一个变量然后返回,所以之后finally操作的变量如果是基本类型的话不会影响返回值。 但是如果返回值是引用类型的话,因为指向同一个对象所以还是有影响的。在try块中有System.exit(0);这样的语句,System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,括号里面的是参数,进程结束的返回值,这样finally语句也不会被执行到。
public static String test1() { try { System.out.println("try block"); return test12(); } finally { System.out.println("finally block"); } } public static String test12() { System.out.println("Start executing the ruturn statement in try"); return "try requires return statements"; }运行的结果:(验证了finally是在开始执行try中要reuturn的语句之后并且try需要return的语句返回之前执行的。
try blockStart executing the ruturn statement in tryfinally blocktry requires return statementfinally块中有return语句的会覆盖try块中的return返回。如test2测试代码。
public static String test2() {String statements = "requires return statements";try {System.out.println("try block");return "try " + statements;} catch (Exception e) {System.out.println("catch block");} finally {System.out.println("finally block");return "finally " + statements;}}运行结果:
try blockfinally blockfinally requires return statements如果finally语句中没有return语句覆盖返回值,按照try块中的return返回。如test3测试代码
public static String test3() {String statements = "requires return statements";try {System.out.println("try block");return "try " + statements;} catch (Exception e) {System.out.println("catch block");} finally {System.out.println("finally block");statements = "finally " + statements;}return "Other statements ";}运行结果:
try blockfinally blocktry requires return statementsfinally操作的变量如果是基本类型的话不会影响返回值,finally操作的变量如果返回值是引用类型的话,因为指向同一个对象所以还是有影响的。如test4测试代码
public static Map<String, String> test4() { Map<String, String> map = new HashMap<String, String>(); map.put("KEY", "INIT"); try { map.put("KEY", "TRY"); return map; } catch (Exception e) { map.put("KEY", "CATCH"); } finally { map.put("KEY", "FINALLY"); map = null; } return map; }运行结果:
{KEY=FINALLY}try块里的return语句在异常的情况下不会被执行。如test5测试代码
public static String test5() {int b = 20;String statements = "requires return statements";try {System.out.println("try block");b = b / 0;return "try " + statements;} catch (Exception e) {b += 15;System.out.println("catch block");} finally {System.out.println("finally block");if (b > 25) {System.out.println("b>25, b = " + b);}b += 50;}return "Other statements ";}运行结果:
try blockcatch blockfinally blockb>25, b = 35Other statements当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样.如test6测试代码
public static String test6() { int b = 20; String statements = "requires return statements"; try { System.out.println("try block"); b = b /0; return "try " + statements; } catch (Exception e) { b += 15; System.out.println("catch block"); return "catch " + statements; } finally { System.out.println("finally block"); if (b > 25) { System.out.println("b>25, b = " + b); } b += 50; } }运行结果:
try blockcatch blockfinally blockb>25, b = 35catch requires return statements
阅读全文
0 0
- try catch finally,try里有return,finally还执行么?
- try catch finally,try里有return,finally还执行么?
- try catch finally,try里有return,finally还执行么
- try catch finally,try里有return,finally还执行么?(最强总结)
- try catch finally,try里有return,finally还执行么?(最强总结)
- try catch finally,try里有return,finally还执行么?
- try catch finally,try里有return,finally还执行么
- try catch finally,try里有return,finally还执行么?
- 7. try catch finally,try里有return,finally还执行么?
- try catch finally 里有return的执行机制
- try catch finally return?
- try catch finally return
- try catch finally return
- try-catch-finally的执行顺序(有return的情况)
- try catch finally 有return的执行顺序
- 有return时try catch finally的执行顺序
- 有Return情况下的try catch finally执行顺序
- try, catch, finally, return的执行顺序
- POJ 1573 Robot Motion 搜索找一个循环
- html+css+js编码规范
- linux tar压缩排除某个文件夹
- python异常处理
- 基础练习 十六进制转十进制
- try catch finally,try里有return,finally还执行么?
- lintCode入门篇之整数排序--直接插入
- 常用电子面单接口API demo下载
- socket与http的区别
- bzoj 4818 [Sdoi2017]序列计数 矩阵乘法优化dp+容斥
- reids Java基本操作 (转自博客园)
- SpringMVC中pageOffice使用心得(在线查看PDF文档)
- 我创建的docker容器
- Override和Overload的含义去区别