Java运行时异常

来源:互联网 发布:java程序员好找工作吗 编辑:程序博客网 时间:2024/06/05 21:55

首先看一下Java中Throwable,它有两个子类,Error和Exception。其中异常可以分为Checked Exception和UnChecked Exception两类。

所有RuntimeException类及其子类的实例被称为运行期异常,被归类为UnChecked Exception。其它,非RuntimeException类及其子类的异常则被归类为Checked Exception。

Checked异常

Checked异常又称为编译时异常,即在编译阶段被处理的异常。编译器会强制程序处理所有的Checked异常,也就是用try…catch显式的捕获并处理,因为Java认为这类异常都是可以被处理(修复)的。在Java API文档中,方法说明时,都会添加是否throw某个exception,这个exception就是Checked异常。如果没有try…catch这个异常,则编译出错,错误提示类似于“Unhandled exception type xxxxx”。

该类异常捕获的流程是:

  • 执行try块中的代码出现异常,系统会自动生成一个异常对象,并将该异常对象提交给Java运行环境,这个就是异常抛出(throw)阶段;

  • 当Java运行环境收到异常对象时,会寻找最近的能够处理该异常对象的catch块,找到之后把该异常对象交给catch块处理,这个就是异常捕获(catch)阶段。

Checked Exception不引起Android App Crash。

UnChecked异常

Runtime Exception,最常见的莫过于NullPointerException。UnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出,也就是我们所说的Crash。

理论上可以把这些异常catch住,但无法将所有的代码都加上try…catch,这样对代码的效率和可读性将是毁灭性的;另外UnChecked异常通常都是较为严重的异常,或者说已经破坏了运行环境的。比如内存地址,即使我们try…catch住了,也不能明确知道如何处理该异常,才能保证程序接下来的运行是正确的。

未捕获的异常可以用Thread.UncaughtExceptionHandler,地图客户端中使用UncaughtExceptionHandler捕获运行时异常,将异常信息存储在sdcard中,具体可详见BMUncaughtExceptionHandler类。
0 0