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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面的代码看一下就OK了。
public class tryTest {
    public static void main(String[] args) {
        try {
                tryTest tryTest = new tryTest();
            System.out.println(tryTest.test());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public boolean test() throws Exception {
        try {
            throw new Exception("Something error");// 1.抛出异常
        } catch (Exception e) {// 2.捕获的异常匹配(声明类或其父类),进入控制块
            throw e;// 3. throw前控制转移到finally块,执行完后再返回
            
        } finally {
            return true;// 4. 控制转移,直接返回,不再返回catch块,吃掉了异常        }
    }
}
打印结果为true,main方法捕获不到异常。
也就是说如果在finally块中使用return,continue或break,则会把抛出的异常吃掉。
如果try或catch中有return语句,finally块中的return会覆盖掉try或catch块中的return。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

4 个回复

倒序浏览
有点不明白你说把抛出的异常吃掉什么意思。

你这个程序中test()方法中try块呵catch块中都是手动抛出异常,有异常的话该怎么办还是怎么办。和你finally块中的语句没有什么关系

continue 和break是流程控制的语句,一般都会用在循环里边。放在finally里边就算程序不出错也没有什么意义。

。。 tryTest tryTest = new tryTest();//这句看着有点别扭,建议把类名 驼峰标示。呵

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 寻找幸福的13狼 于 2012-2-9 23:34 编辑

如果try中有return语句,在调用return语句之前就会先调用finally方法。你的finally方法中有个return就已执行反回了。后面的代码就不用执行了。finally一般用来做一些清尾工作,如:释放连接,等等.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
赞成余松霖同学的说法,并不会吃掉异常,下面两段代码都不会:
  1. public class Test{
  2.         public static void main(String[] args) {
  3.                 try {
  4.                         throw new Exception("Something error");
  5.                 }catch (Exception e) {
  6.                         e.printStackTrace();
  7.                 } finally {
  8.                    return ;
  9.                 }
  10.         }
  11. }
复制代码
  1. public class Test{
  2.         public static void main(String[] args) {
  3.                 try {
  4.                         int a=1/0;
  5.                         return;        
  6.                 }catch (Exception e) {
  7.                         e.printStackTrace();
  8.                 } finally {
  9.                    return ;
  10.                 }
  11.         }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
可以加的! 我加的 return ; 就没有问题!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马