zoukankan      html  css  js  c++  java
  • 一个常见的问题,混淆的答案

    问题是:try{} 里有一个return语句, 那么紧跟这个try后的finally{}里的code会不会被执行,什么时候被执行, 在return前还是后?

    有回答是:finally块先于return执行。 

    这个问题可以用一个小实验得到解答

    int result =  test(); 
    
    }
    
    private int  test() 
    { 
        int i = 0; 
        int j = 0; 
        try 
        { 
            ++i; 
            ++j; 
            return i+j; 
        } 
        catch 
        { 
            --i; 
            return i+j; 
        } 
        finally 
        { 
            ++i; 
        } 

    这段代码的test()返回值是2,而不是3, 可见 try {}里的 return i+j 里的表达式先求值,然后放到一个暂存变量,之后转到finally{} 块里的代码继续执行,执行完后跳回try{}块结尾,并把转存变量返回

    下面的情况是try{}块里发生了异常

    int result =  test(); 
    
    }
    
    private int  test() 
    { 
        int i = 0; 
        int j = 0; 
        try 
        { 
            ++i; 
            ++j; 
            throw new Exception(); 
            return i+j; 
        } 
        catch 
        { 
            --i; 
            return i+j; 
        } 
        finally 
        { 
            ++i; 
        } 

    这段代码的异常出现后,跳到catch{}块执行,之后跳到finally{}块执行, 之后跳回catch{}块结尾处返回。

  • 相关阅读:
    随笔
    洛谷
    洛谷
    洛谷
    (水题)洛谷
    洛谷
    (水题)洛谷
    洛谷
    (水题)洛谷
    (水题)洛谷
  • 原文地址:https://www.cnblogs.com/grkin/p/3393190.html
Copyright © 2011-2022 走看看