YaoDeBiAn 2017-03-11 11:22 采纳率: 50%
浏览 2324

Java关于在catch中抛出一个异常给外围函数却捕获不到的问题

先给出一串代码:
package javaException;

public class TestException {
public TestException(){
}

boolean testEx()throws Exception{
    boolean ret=true;
    try{
        ret=testEx1();
    }
    catch(Exception e){
        System.out.println("testEx, catch exception");
        ret=false;
        throw e;
    }
    finally{
        System.out.println("testEx, finally:return value:"+ret);
        return ret;
    }
}

boolean testEx1()throws Exception{
    boolean ret=true;
    try{
        ret=testEx2();
        if(!ret){
            return false;
        }
        System.out.println("testEx1, at the end of try");
        return ret;
    }
    catch(Exception e){
        System.out.println("testEx1, catch exception");
        ret=false;
        throw e;
    }
    finally{
        System.out.println("testEx1, finally:return value:"+ret);
        return ret;
    }
}

boolean testEx2()throws Exception{
    boolean ret=true;
    try{
        int b=12;
        int c;
        for(int i=2;i>=-2;i--){
            c=b/i;
            System.out.println("i="+i);
        }
        return true;
    }
    catch(Exception e){
        System.out.println("testEx2, catch exception");
        ret=false;
        throw e;
    }
    finally {
        System.out.println("testEx2, finally:return value="+ret);
        return ret;
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestException testException1=new TestException();
    try{
        testException1.testEx();
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

}
对于函数testEx2()中catch块中抛出的异常,testEx1()函数却捕获不到,这是为什么呢?
我想过一种可能:testEx1()中将testEx2()的返回值赋值给ret,即 ret=testEx2(),而testEx2()中抛出的异常在这个过程中被过滤掉了。因为如果我直接把testEx2()放在testEx1()中,而不是通过ret=testEx2()的方式,那么这个异常是能够被捕获的。
求证各位大佬!!!

  • 写回答

2条回答 默认 最新

  • oyljerry 2017-03-11 12:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题