为了账号安全,请及时绑定邮箱和手机立即绑定

网上看到这段代码,没有像课里讲的一样产生异常链?

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) {  

        TestException testException1 = new TestException();  

        try {  

            testException1.testEx();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

代码输出结果是:

i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, finally; return value=false
testEx, finally; return value=false

 不明白的是为什么testEx1和testEx都没有捕获到异常。

正在回答

3 回答

你throw了一个异常,然后finally中又返回了一个值,相当于方法正常结束,所以异常就没了。finally中不要加return。

1 回复 有任何疑惑可以回复我~
#1

云与米修 提问者

原来是这么回事,明白了,谢谢。
2016-04-08 回复 有任何疑惑可以回复我~
#2

我真的不知道要取什么名字

是不是说,我已经用这个声明的异常加finally已经解决了代码中的问题,让程序正常运行,就不出现异常。
2016-05-31 回复 有任何疑惑可以回复我~

boolean ret = true;  

        try {  

            ret = testEx2();  

            if (!ret) {  

                return false;  

            }  

            System.out.println("testEx1, at the end of try");  

            return ret;  

这段代码的意思是定义ret为真,如果testEx2(); 返回值为假,则抛出异常

0 回复 有任何疑惑可以回复我~

这个程序的输出顺序是先testEx2,再testEx,最后testEx。而为什么视频上程序的输出顺序是先test2,再text1?和什么有关

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

网上看到这段代码,没有像课里讲的一样产生异常链?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信