Java基础二:异常

异常是指阻止当前方法或作用域继续执行的问题,也就是程序执行中发生的不正常行为(逻辑错误和语法错误不是异常)。

    在编程中,发现错误的理想实际是在编译阶段,但是在编译期间并不能找出所有的错误,剩下的问题必须在运行期间解决,这就需要Exception来正确处理这个问题。

Java中的异常事件可以分为Error和Exception两类(Error和Exception都继承了Throwable类):

    Error:是指不期望被用户捕获的异常,这种情况比较严重,一般就算是虚拟机也无法解决,比如OutOfMemoryError等,一般不会写代码去针对性的处理这类问题;

    Exception:用户可以被用户捕获到的异常情况,是在编程中可以预料到的一般性问题,往往在代码中会使用特定的方法去解决这些具有偶然发生性的问题因素。

    同时,Java中异常又分为受检查的异常(checked)和不受检查的异常(unchecked),不受检查的异常不需要在方法或者构造函数上显式的去声明,而是需要我们在编码过程中可以去避免的逻辑错误,比如分母为0、数组下标越界、NullPointerException等。受检查的异常需要在代码中去显式的去捕获或者抛出,也就是需要在方法或者构造函数上去显式的声明处理。

对于异常的类图如下图所示:

Java基础二:异常

异常的处理方式分为两种,一种是直接抛出,另一种是捕获处理,也就是抓抛模型。

抓:就是使用try{}catch()finally{}来处理,其中finally是可以根据需要来选择性写或者不写的,示例代码如下:

Java基础二:异常

当然这只是一个示例代码,在读取文件时,可能会找不到这个文件,所以会报异常,这时候用try{}catch(){}来处理,其中finally里面的代码,无论是否会发生异常都会执行的。另外,可以catch多次,但是catch的异常只能从小到大或者平级:

Java基础二:异常

catch异常范围从大到小,是没有意义的,也会报错:

Java基础二:异常

另一种方式是直接抛出:

Java基础二:异常

这两种方式都可以处理异常。一般情况下建议用try的方式,这样可以在发生异常后,灵活应对这种问题。