1 class Exc0 { 2 public static void main(String args[]) { 3 int d = 0; 4 int a = 42 / d; 5 } 6 }
当Java运行时系统检查到被零除的情况,它构造一个新的异常对象然后抛出该异常。这导致Exc0的执行停止,因为一旦一个异常被抛出,它必须被一个异常处理程序捕获并且被立即处理。该例中,我们没有提供任何我们自己的异常处理程序,所以异常被Java运行时系统的默认处理程序捕获。任何不是被你程序捕获的异常最终都会被该默认处理程序处理。默认处理程序显示一个描述异常的字符串,打印异常发生处的堆栈轨迹并且终止程序。
1 java.lang.ArithmeticException: / by zero 2 at Exc0.main(Exc0.java:4)
注意,类名Exc0,方法名main,文件名Exc0.java和行数4是怎样被包括在一个简单的堆栈使用轨迹中的。还有,注意抛出的异常类型是Exception的一个名为ArithmeticException的子类,该子类更明确的描述了何种类型的错误方法。本章后面部分将讨论,Java提供多个内置的与可能产生的不同种类运行时错误相匹配的异常类型。
1 class Exc1 { 2 static void subroutine() { 3 int d = 0; 4 int a = 10 / d; 5 } 6 public static void main(String args[]) { 7 Exc1.subroutine(); 8 } 9 }
默认异常处理器的堆栈轨迹结果表明了整个调用栈是怎样显示的:
1 java.lang.ArithmeticException: / by zero 2 at Exc1.subroutine(Exc1.java:4) 3 at Exc1.main(Exc1.java:7)
如你所见,栈底是main的第7行,该行调用了subroutine( )方法。该方法在第4行导致了异常。调用堆栈对于调试来说是很重要的,因为它查明了导致错误的精确的步骤。
原文:http://www.cnblogs.com/Coda/p/4458735.html