黑马程序员技术交流社区

标题: 关于try catch finally的问题 [打印本页]

作者: Mr___dangerous    时间: 2015-10-31 19:09
标题: 关于try catch finally的问题
为什么在finally写return会有警告呢?好奇怪。
作者: Mr___dangerous    时间: 2015-10-31 19:28
0.0,又是没人理,自顶
作者: ゞ神说    时间: 2015-10-31 19:56
public class FinallyReturnTest {  
  
    public static void main(String[] args) {  
         
        System.out.print("value = " + testMethod());  
  
    }  
      
    public static int testMethod() {  
         
        try {  
            System.out.println("before exception");  
            int y = 1;  
            int x = y/0;  
            System.out.println("after exception");  
              
        } catch(Exception e) {  
            System.out.println("catcher");  
            return 1;  
              
        } finally {  
            System.out.println("finally");  
//          return 2;  
        }  
//      System.out.println("outside");  
        return 3;  
         
    }  
  
}
运行结果是:
before exception
catcher
finally
value = 1
catch中有return,finally中没有return,通过debug代码可知,先执行finally中的代码,然后再执行catcher中return 1。
作者: ゞ神说    时间: 2015-10-31 19:57
public class FinallyReturnTest {  
  
    public static void main(String[] args) {  
         
        System.out.print("value = " + testMethod());  
  
    }  
      
    public static int testMethod() {  
         
        try {  
            System.out.println("before exception");  
            int y = 1;  
            int x = y/0;  
            System.out.println("after exception");  
              
        } catch(Exception e) {  
            System.out.println("catcher");  
            return 1;  
              
        } finally {  
            System.out.println("finally");  
            return 2;  
        }  
//      System.out.println("outside");  
//      return 3;  
         
    }  
  
}  

运行结果是:
before exception
catcher
finally
value = 2
catch中和finally中都有return,此时在try,catch代码块外面不能再写有其它代码了,在finally中添加return 2时,代码中会显示finally block does not complete normally的警告,通过debug,可以得知,虽然先执行了catch中return 1,但是方法并没有退出,接着又去执行finally中代码,当执行到return 2时,方法退出,执行完毕。
作者: 陈威    时间: 2015-10-31 20:28
当try,catch,finally都有return时,执行try时,现将try中的return缓存,并没有执行,
再执行finally中的return,这时返回的就是finally中的return




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2