• 关于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
  • 相关阅读:
    零拷贝报文捕获平台
    Table of Contents ---BCM
    bcm cmd
    Linux常用性能调优工具索引
    Vue params传值的坑
    安装了新的angular版本后无法运行老的angular版本项目
    后端返回的数据与前端console.log数据不一致问题
    门户页跳转页面 跳转指定的页面 接口会变成路由去显示 而不是显示组件
    配置git ssh 密钥
    grafana环境变量
  • 原文地址:https://www.cnblogs.com/ss0xt/p/6667184.html
Copyright © 2020-2023  润新知