java 中的Exception和RuntimeException区别

来源:互联网 发布:asm算法原理 编辑:程序博客网 时间:2024/06/06 19:07

1、java将所有的错误封装为一个对象,其父类为Throwable, Throwable有两个子类:Error和Exception。

2、

网上摘得一段话,比喻的很恰当:


        继承Exception还是继承RuntimeException是由异常本身的特点决定的,而不是由是否是自定义的异常决定的。例如我要写一个java api,这个api中会调用一个极其操蛋的远端服务,这个远端服务经常超时和不可用。所以我决定以抛出自定义异常的形式向所有调用这个api的开发人员周知这一操蛋的现实,让他们在调用这个api时务必考虑到远端服务不可用时应该执行的补偿逻辑(比如尝试调用另一个api)。此时自定义的异常类就应继承Exception,这样其他开发人员在调用这个api时就会收到编译器大大的红色报错:【你没处理这个异常!】,强迫他们处理。又如,我要写另一个api,这个api会访问一个非常非常稳定的远端服务,除非有人把远端服务的机房炸了,否则这个服务不会出现不可用的情况。而且即便万一这种情况发生了,api的调用者除了记录和提示错误之外也没有别的事情好做。但出于某种不可描述的蛋疼原因,我还是决定要定义一个异常对象描述“机房被炸”这一情况,那么此时定义的异常类就应继承RuntimeException,因为我的api的调用者们没必要了解这一细微的细节,把这一异常交给统一的异常处理层去处理就好了。


3、Exception 在程序中必须使用try ...catch 进行处理

RuntimeException 可以不使用try...catch 进行处理,但是如果有异常产生,则异常将有JVM进行处理。


4、提示:

虽然RuntimeException 的异常可以不用try...catch进行处理,但是如果一旦出现异常,则肯定会导致程序中断执行,所以,为了保证程序在出错后依然可以执行,所以在开发代码时最好使用try ... catch 的代码处理机制进行处理。

原创粉丝点击