Java异常传播

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

异常传播示例

TestExceptionPropagation1.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...");  
  }  
}  

输出:

exception handled
       normal flow...

在上面的示例中,异常在m()方法中发生,但没有被处理,所以它向前传播到前一个n()方法,也没有被处理,然后又传播到p()方法,其中异常被处理。

异常可以在调用堆栈中的任何方法中处理,无论是在main()方法、p()方法、n()方法还是m()方法中。

图1

异常传播示例

TestExceptionPropagation1.java

class TestExceptionPropagation2{  
  void m(){  
    throw new java.io.IOException("device error");//检查异常
  }  
  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");  
  }  
}  

输出:

Compile Time Error

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想