异常(四):Java的异常跟踪栈和异常处理规则

1. Java的异常跟踪栈:编程

异常对象的printStackTrace()方法用于打印异常的跟踪栈信息,根据printStackTrace()方法的输出结果,咱们能够找到异常的源头,并跟踪到异常一路触发的过程。spa

在面向对象编程中,大多数复杂操做都会被分解成一系列方法调用。因为一个大的业务功能须要由多个对象来共同实现,在最终的编程模型中,不少对象将经过一系列方法调用来实现通讯,执行任务。调试

因此面向对象的应用程序运行时,常常会发生一系列方法调用,从而造成“方法调用栈”,异常的传播则相反:只要异常没有被彻底捕获(包括异常没有被捕获,或异常被处理后从新抛出了新异常),异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次传给其调用者......直至最后传到main方法,若是main方法依然没有处理该异常,JVM会停止该程序,并打印异常的跟踪栈信息。对象

虽然printStackTrace()方法能够很方便地用于追踪异常的发生状况,能够用它来调试程序,但在最后发布的程序中,应该避免使用它。应该对捕获到的异常进行适当的处理,而不是简单地将异常的跟踪栈信息打印出来。面向对象编程

2. 异常处理规则:class

成功的异常处理应该实现以下4个目标:程序

  • 使程序代码混乱最小化
  • 捕获并保留诊断信息
  • 通知合适的人员
  • 采用合适的方式结束异常活动

下面是达到这种效果的基本准则:方法

2.1.不要过分使用异常通信

2.2.不要使用过于庞大的try块数据

2.3.避免使用Catch All语句(指的是一种异常捕获模块,它能够处理程序发生的全部可能异常)。

2.4.不要忽略捕获到的异常

  • 处理异常:对异常进行合适的修复,而后绕过异常发生的地方继续执行;或者用别的数据进行计算,以代替指望的方法返回值;或者提示用户从新操做......总之,对于Checked异常,程序应该尽可能修复。
  • 从新抛出新异常:把当前运行环境下能作的事情尽可能作完,而后进行异常转译,把异常包装成当前层的异常,从新抛出给上层调用者。
  • 在合适的层处理异常:若是当前层不清楚如何处理异常,就不要在当前层使用catch语句来捕获该异常,直接使用throws声明抛出该异常,让上层调用者来负责处理该异常。

总之,不要忽略异常!既然已经捕获到异常,那catch块理应作些有用的事情---处理并修复这个错误。catch块整个为空,或者仅仅打印出错信息都是不妥的!

相关文章
相关标签/搜索