原理:异常在底层被拦截了,将不会上抛至上层。
如以下示例,A调用B的方法,B方法会出错,我在B中已拦截了,那么在A中将看拦截不到异常。
B代码:
package testexceptionthrows;
public class B {
public void go() throws Exception{
try {
System.out.println("B.go()......");
int a=3/0;
} catch (Exception e) {
System.err.println("被B捕捉,在B中发生异常!");
//throw e;
}
}
}
A代码:
package testexceptionthrows;
import junit.framework.TestCase;
public class A extends TestCase {
B b=new B();
public void testRun(){
try {
b.go();
} catch (Exception e) {
System.err.println("A中捕捉,B中遇到异常了");
e.printStackTrace();
}
}
}
所以,如果想在最上层拦截到所有异常,应该让下面的在try catch后,全部throws出来,如A中注释掉的部分。