Java里的异常

 

前言:最近都在准备考试复习都木有这么学习新姿势,临时找了以前看书的记录凑出了这个文章,太罪过了><

感觉自己目前写的程序都是编译器在强制自己要做异常处理,对于怎么样编写优秀的异常处理程序还不算很清楚,下面先整理一下Thinking in java里看到的关于异常的知识吧。异常处理的原则是”只有你知道如何处理的情况下才捕获异常”,其中一个重要目标是将错误处理代码和错误发生地点分离。

分类:分为被检查异常(checked)和不被检查异常(unchecked)。这里的检查指的是否进行编译时期的强制检查。

重新抛出对象fillStackTrace的用法;异常出现后异常对象会被压栈,我们可以通过打印栈里的信息,来获取发生异常的函数调用情况,栈底的元素是调用序列里的第一个方法。这里要注意异常重新抛出的一个问题,有时候我们捕获一个异常后我们并不希望在这处理,只是想像上一层再次抛出,比如像catch(Exception e ) {

throw e; // rethrow the exception

}这样重新抛出的话,若用printStackTrace打印栈元素的话,只会显示最原始抛出异常点的信息而不包括重新抛出点的位置,若要把重新抛出异常的信息也要加入栈里,需要调用fillInStackTrace这个方法把信息压入。

finally的注意和特别用法。finally作为try/catch机制里最后进行处理的措施,就算try里遇到了break和return,finally也还是会执行的。

继承对异常的影响。若子类继承了父类的某个方法,子类可以不抛出父类规定的异常。子类要覆写(Override)父类的某个方法,若原方法定义了某个异常,子类的方法里不能再给这个方法抛出更多异常。

切勿“吞食”掉异常。写异常有时候的确很烦,特别遇到有很多异常嵌套的时候,我们为了应付编译器就只写了一个try/catch在那或者简单的throw出去,这个异常就被吞食了,这不是一个好习惯。最次我们也要把异常打印出来提醒,或者我不知道这里遇到异常应该怎么处理,我就抛出一个RuntimeException结束程序把。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>