zoukankan      html  css  js  c++  java
  • 关于Java异常一段很有意思的代码

    今天学习了Java的异常,讲到try-catch-finally时,老师演示了一段代码,觉得很有意思,很能反映出其执行的过程,让自己有点绕,特意记录一下。



    只要代码执行到try代码内部, 不管有没有异常,finally区域的代码都会执行.
    即便try代码和catch代码中有return, finally也会执行.
    只有一种情况在执行finally代码前,退出虚拟机.
    System.exit(1);

    --------------------------------------------------------------------------------------------

    finally语句和前面的return语句那个先执行? finally先执行. 

    int i = 10;
    try {
         return i++; //i++: 10 i:11  黄色区域,csdn代码加颜色好像有问题。。。。。
    } catch (Exception e) {
         e.printStackTrace();
    }finally {
         i++; // i:12 蓝色区域
    }

    上面代码返回的是10, i的最终结果: 12

    执行步骤:1. 黄色区域的i++先执行,算出表达式的结果, 但是先不return(先“存”起来).2. 执行finally中蓝色区域的i++3. 在执行黄色区域的return.

    int i = 10;
    try {
      return i++; //i++: 10 i:11 黄色区域,csdn代码加颜色好像有问题。。。。。
    
    } catch (Exception e) {
       e.printStackTrace();
    }finally {
       return i++;//i++:11, i:12 蓝色区域
    }
    


    上面代码返回的是11, 不是10.

    执行步骤:1. 黄色区域的i++先执行,算出表达式的结果, 但是先不return.2. 执行蓝色区域的i++计算出表达式的结果,然后return.3. try的return没有执行.

    http://huangxiutao.cn
  • 相关阅读:
    Android Activity生命周期
    Android 横屏切换竖屏Activity的生命周期(转)
    (引用)mysql总结(二)
    (转载)mysql指令总结
    (引用)性能测试没有告诉你的
    参数化(引用)
    (引用)什么时候开展性能(二)
    (引用)什么时候开展性能(一)
    性能测试中容易混淆的概念
    浏览器内核
  • 原文地址:https://www.cnblogs.com/ss0xt/p/6667184.html
Copyright © 2011-2022 走看看