A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mr___dangerous 中级黑马   /  2015-10-31 19:09  /  529 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么在finally写return会有警告呢?好奇怪。

4 个回复

倒序浏览
0.0,又是没人理,自顶
回复 使用道具 举报
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。
回复 使用道具 举报
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时,方法退出,执行完毕。
回复 使用道具 举报
当try,catch,finally都有return时,执行try时,现将try中的return缓存,并没有执行,
再执行finally中的return,这时返回的就是finally中的return
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马