在程序运行时打断正常程序流程的任何不正常的情况称为错误或异常。异常包括用户造成的异常和系统造成的异常。例如:网络连接中断、操作符越界、加载的类找不到。
在Java中异常产生,主要是有三种原因。首先,编写程序代码中的错误产生的异常,比如数组越界、空指针异常等,这种异常叫做未检查的异常,一般需要在类中处理这些异常。其次,Java内部错误发生的异常,Java虚拟机产生异常。另外,通过throw(抛出异常)语句手动生成的异常,这种异常叫做检查的异常,一般用来给方法调用者提供一些必要的信息。
异常分为两种主要类型:Throwable是异常类根类,其派生出两个重要的子类, Error 和 Exception。Exception类表示可预料异常,可以处理或恢复;Error类表示不可预料异常,不能处理或恢复。
一种异常处理方式是使用try-catch-finally语句捕获程序中产生的异常,然后针对不同的情况采取不同的处理程序进行处理。具体的格式为:
try{
Java statements //一条或多条可能抛出异常的Java语句
}catch(Exception e){
Java statements //Exception类型的异常(所有可处理的异常)执行的代码
}finally{
//无论是否存在异常,始终被执行的代码
}
IllegalArgumentException:传递非法参数异常、IndexOutOfBoundsException:下标越界异常、NumberFormatException:数字格式异常、ArrayIndexOutOfBoundsException:数组越界异常、ArrayStoreException:数组类型不一致异常等都属于运行时异常。而ClassNotFoundException:找不到指定 class 异常、IOException:IO 操作异常、FileNotFoundException:文件不存在异常、SQLException:SQL语句异常、InterruptedException:中断异常等则属于非运行时异常。
异常处理机制的特点包括:通过异常传播可以将异常传递到合适的位置再处理,使得Java语言的异常处理更加灵活;可以在源代码级别将正在执行的逻辑代码和异常处理的代码相分离,更加便于代码阅读和维护;过度使用异常处理将降低程序的执行效率,增加语法的复杂度。