📅  最后修改于: 2020-09-26 07:07:28             🧑  作者: Mango
首先从栈顶抛出一个异常,如果未捕获到异常,则将调用堆栈降到前一个方法;如果未捕获到异常,则再次将异常降到上一个方法,依此类推,直到被捕获为止。捕获或直到它们到达调用堆栈的最底端。这称为异常传播。
规则:默认情况下,未检查的异常在调用链中转发(传播)。
class TestExceptionPropagation1{
void m(){
int data=50/0;
}
void n(){
m();
}
void p(){
try{
n();
}catch(Exception e){System.out.println("exception handled");}
}
public static void main(String args[]){
TestExceptionPropagation1 obj=new TestExceptionPropagation1();
obj.p();
System.out.println("normal flow...");
}
}
Output:exception handled
normal flow...
在上面的示例中,异常在未处理的m()方法中发生,因此将其传播到先前未处理的n()方法中,再次将其传播到在其中处理异常的p()方法中。
可以使用main()方法,p()方法,n()方法或m()方法在调用堆栈中的任何方法中处理异常。
规则:默认情况下,检查异常不在调用链中传播(传播)。
class TestExceptionPropagation2{
void m(){
throw new java.io.IOException("device error");//checked exception
}
void n(){
m();
}
void p(){
try{
n();
}catch(Exception e){System.out.println("exception handeled");}
}
public static void main(String args[]){
TestExceptionPropagation2 obj=new TestExceptionPropagation2();
obj.p();
System.out.println("normal flow");
}
}
Output:Compile Time Error