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
  • 相关阅读:
    [心得]如何快速利用SqlMap做安全檢測
    [心得]群裡提問的流水序號產生方式
    STL中使用reverse_iterator时,如何正确使用erase函数
    西山居面试之旅
    LAMP兄弟连 视频教程集
    [译]理解Windows消息循环
    C++设计模式 -- 解析和实现
    winsock 收发广播包
    SqlServer sysobjects_table
    查询反模式
  • 原文地址:https://www.cnblogs.com/ss0xt/p/6667184.html
Copyright © 2011-2022 走看看