test2方法没有声明异常抛出,为什么编译器还能通过?
test1方法不声明,直接throw就会编译不通过。而test2方法调用test1方法,try-catch了,为什么异常还能抛出去?抛出去的时候为什么还不需要throws声明。为什么,为什么呢?
test1方法不声明,直接throw就会编译不通过。而test2方法调用test1方法,try-catch了,为什么异常还能抛出去?抛出去的时候为什么还不需要throws声明。为什么,为什么呢?
2016-02-26
都把问题想复杂了,你想啊throw是抛出异常,有抛就有接,如果说test1()中只有throw抛出异常而没有被捕获的话编译当然报错,所以在test2()中老师就用try。。catch捕获了test1()抛出的异常“喝车别开酒”,进而利用这个异常来触发另外一个异常(就是所谓的异常链,一个异常导致另一个异常的发生),即“司机一滴酒,亲人两行泪”。那为什么test2没有throws声明,而“throw newExc”却能编译通过。?那是因为test2()调用了test1()中所抛出的异常了,换句话来说就是test2()利用了test1()中的异常了,所以编译能通过啊(注:如果没有调用test1()中的throw抛出的异常的话就不能通过了)。整个过程就是test1()throw一个“喝车不开酒”异常—-——test2()try..catch捕获——>test2()利用捕获的异常来触发另一个异常“司机。。”——>抛出test2()异常
最后总结一下:
有抛就有接,用了throw就要用try。。catch来捕获,否则光throw就会编译不通过
异常链,就是利用一个抛出来的异常来触发另一个,最后将其抛出来
举报