猿教程 Logo

Java 异常传播

异常首先从堆栈顶部抛出,如果没有被捕获,它将调用堆栈下降到上一个方法,如果没有被捕获,异常再次下降到上一个方法,依此类推,直到它们被捕获或直到它们到达调用堆栈的最底部。这被称为异常传播。

规则:默认情况下未调用的异常在调用链(传播)中转发。

相关实例:

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


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/exception-propagation-java.html