读书人

java的错误处理机制

发布时间: 2012-12-22 12:05:06 作者: rapoo

java的异常处理机制

?????? 异常机制已经成为很多语言的一种判断其成熟度的标准,除了C之外,其他的主流编程语言比如java,C#,Ruby等都提供了成熟的异常处理机制,异常机制可以使得程序中异常处理代码和正常业务代码的分离,保证程序代码更加优雅,并可以提高程序的健壮性。

?

网上关于java异常处理机制的文章有很多,我只写一下我觉得可能需要注意的地方。

?

1:在java中处理异常主要有五个关键字:try catch finally throw throws。

throw与throws的区别是前者可以可以直接抛出一个异常,可以当做单独的语句使用,后者主要是在方法签名中使用,用于申明该方法可能抛出的异常。

?

2:java将异常分为两种 ①:checked异常②:Runtime异常,java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序程序处理所有的Checked异常,常见的Checked异常比如IOException,SqlException。所有的异常都继承自Exception类,在异常中很少有接口。Exception和Error类又继承自Throwable类。

?

3:程序捕获异常和不捕获异常的区别是这样的,如果捕获该异常并且在catch块中处理那么程序将从捕获的地方继续向下执行,如果不捕获而程序在运行时遇到异常,程序就会从运行时环境终止。请看下面的程序,模拟了一次异常的处理。

?

说明程序没有执行到结束就终止了,如果我们去掉注释那么程序的输出是:

?

java的错误处理机制

?

?????? 上面这个例子很好的解释了捕获异常的意义,捕获异常的意义很重大,它能保证我们的程序更加健壮,比如有这样一种程序需要输入一个整数才能正常运行,否则抛出异常,那么客户在不知道的情况下输入了一个负数,那么我们是再给其一次机会还是直接让程序退出呢?很显然我们捕获异常然后告诉客户正确的输入方式,然后再让其输入是最好的。

?

4:try catch finally 通常是一起出现的,如果有try那么在catch和finally必定有且至少有一个。finally必须放在所有的catch之后。使用finally回收资源是大部分人会做的事情,因为垃圾回收不会回收任何的物理资源比如数据库的连接等。

?????? 在try中执行了return语句或者throw语句之后程序还是会执行finally中的代码这就是它存在的价值,当程序在try或者catch中遇到return或者throw,这两个语句都会导致该方法立即结束,但是系统并不会立即执行它们,而是去寻找该处理是不是包含finally块,如果没有,马上执行,如果有,就先执行finally块,然后跳回来执行return和throw。

那么我想如果finally中遇到了return和throw,会出现什么呢?

package testException;public class test3 {public static void main(String[] args) throws SelfException{firstMethod();}public static void firstMethod()throws SelfException{secondMethod();}public static void secondMethod()throws SelfException{thirdMethod();}public static void thirdMethod()throws SelfException{throw new SelfException("自定义异常信息");}}class SelfException extends Exception{private static final long serialVersionUID = 1L;public SelfException() {}SelfException(String msg){super(msg);}}

?程序的处理结果是这样的

java的错误处理机制

?

可以看到,在最初的程序是从15行开始抛出,然后交给12行,然后到第九行,然后到第6行,在main方法终止,这个过程就是java的异常跟踪栈,它清楚的记录了应用程序中执行停止的各个点,跟踪栈总是最内部的被调用方法逐渐上传,知道最外部业务炒作的起点,通常就是程序的入口main方法或者Thread类的run方法。

?

?

读书人网 >编程

热点推荐