Java 异常处理

所谓异常(Exception),我们把阻止当前程序继续执行的问题叫做异常。Java 体系中,Throwable 类是所有不正常类的基类,他有两个儿子,分别是 Error 和 ExceptionError 一般是产生系统错误时会出现,,比如 虚拟机错误,线程死锁等。Exception 一般分为两种情况,分别是非检查异常(RuntimeException)检查异常。非检查异常说明程序的逻辑出现错误,比如空指针异常(NullPointException)数组下标越界异常(ArrayIndexOutOfBoundsException)类型转换异常(ClassCastException)算术异常(ArithmeticException)。检查异常的类型就比较多了,比如文件不存在的文件异常(IOException),连接错误的 SQL异常(SQLException)等等。

出现异常就要对异常进行处理。一般使用 try-catch 语句在 try 中执行代码,在 catch 中捕获异常,一旦程序出现异常,控制权就转交给 catch 处理。还可以用 try-catch-finally 语句,finally 主要是处理一些善后工作,finally 执行完了再返回到程序调用的地方。如果会抛出多种异常可以用多个 catch 捕获,对异常的捕获顺序遵循从小到大,从子类到父类的原则。异常对象的 printStackTrace() 方法可以用来打印异常信息。

有时候系统提供的异常类型不能满足要求,我们就需要自定义异常类。自定义异常类必须继承(extends)一个 java 基本异常类,或者直接继承异常的基类 Exception 类。

例如我们自定义一个异常类:

一个方法调用一个可能抛出异常的方法,要么用 try-catch 捕获异常并处理,要么用 throws 声明要抛出的异常,然后在其他的方法中捕获再对异常进行处理。

throw 是一个动词,他抛出一个异常。上面在 test1() 方法中抛出自定义异常,里面没有对异常进行处理,就需要用 throws 声明要抛出的自定义异常,throws 声明的位置在方法名参数列表之后,方法体之前。test2() 执行 test1() 方法并捕获 test1() 抛出的异常,在 catch 中的处理是将异常包装成运行时异常并抛出。

这样一个方法抛出异常被另一个方法捕获又引发新的异常产生的连锁反应,就是异常链

最后控制台输出为:

可以看到在 main() 方法中抛出了运行时异常,这个异常由自定义异常 myException 引起的(Caused by),然后打印出的异常栈中可以看出,首先是 17 行的 text1() 执行产生异常,导致 22 行的 test2() 的执行产生了异常。

 





评论

  1. #1

    dUoxKpta 2019-09-06 01:15:05
    dUoxKpta

  2. #2

    WEmXeAbt 2019-09-05 22:19:22
    WEmXeAbt

  3. #3

    zuLdJdBo 2019-09-05 19:42:00
    zuLdJdBo