java的

这个问题在这里已经有了答案:

  • 多重回报:哪一个设定最终回报值? 6个答案

  • 如果try块中的return已到达,它将控制权交给finally块,并且函数最终正常返回(而不是一个throw)。

    如果发生异常,但代码从catchreturn ,则控制权将转移到finally块,并且函数最终会正常返回(而不是抛出)。

    在你的例子中,你finally有了return ,所以无论发生什么,函数都会返回34 ,因为finally会有最后的(如果你愿意的话)。

    尽管在你的例子中没有涉及,但即使你没有catch并且如果在try块中抛出了一个异常并且没有被捕获,情况也是如此。 通过从finallyreturn ,你完全抑制了异常。 考虑:

    public class FinallyReturn {
      public static final void main(String[] args) {
        System.out.println(foo(args));
      }
    
      private static int foo(String[] args) {
        try {
          int n = Integer.parseInt(args[0]);
          return n;
        }
        finally {
          return 42;
        }
      }
    }
    

    如果你运行它而不提供任何参数:

    $ java FinallyReturn

    ... foo的代码抛出ArrayIndexOutOfBoundsException异常。 但是因为finally块会return ,所以这个异常被取消了。

    这是最好避免在finally使用return一个原因。


    这是一些代码,显示它是如何工作的。

    class Test
    {
        public static void main(String args[]) 
        { 
            System.out.println(Test.test()); 
        }
    
        public static String test()
        {
            try {
                System.out.println("try");
                throw new Exception();
            } catch(Exception e) {
                System.out.println("catch");
                return "return"; 
            } finally {  
                System.out.println("finally");
                return "return in finally"; 
            }
        }
    }
    

    结果是:

    try
    catch
    finally
    return in finally
    
    链接地址: http://www.djcxy.com/p/73691.html

    上一篇: java

    下一篇: In Java, is the result of the addition of two chars an int or a char?