Java异常传播

首先从堆栈的顶部抛出一个异常, 如果未捕获到异常, 则将调用堆栈降到前一个方法;如果未捕获到那里, 则异常再次下降到前一个方法, 依此类推, 直到被捕获为止。被捕获或直到它们到达调用堆栈的最底端。这称为异常传播。
规则:默认情况下, 未检查的异常在调用链中转发(传播)。 异常传播程序
class TestExceptionPropagation1{ void m(){ int data=http://www.srcmini.com/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...

Java异常传播

文章图片
【Java异常传播】在上面的示例中, 异常在未处理的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

    推荐阅读