思维导图
异常简介
系统中存在编译时错误,还有运行时错误,还有逻辑错误。
在Java中被整除时,如果被除数是0,有两种不同的情况。
1 | double d1 = 10 / 0.0; // POSITIVE_INFINITY 正无穷大 |
整数被零除是违法的。
运行时错误,称之为异常。
异常和异常类
所有异常类都派生自类Java.lang.Throwable;这个类其中有两个子类,其中java.lang.Error,表示系统错误。一般也称之为错误(Error),java.lang,Exception 表示可能从任何Java方法或运行期偶发事件中抛出的异常。
Exception
Exception中的子类
异常类型 | 说明 |
---|---|
java.lang.RuntimeException | 那些可能在java虚拟机中正常运行期间抛出的异常的父类 |
java.io.IOException | 发生I/O异常 |
java.lang.NoSuchFieldException | 类不包含指定名称的数据成员时,抛出该异常 |
上面的类除了RunTimeException外其他的异常都需要有专门的异常处理代码对这些异常进行处理。
RuntimeException
RuntimeException中的子类
异常类型 | 说明 |
---|---|
java.lang.ArithmeticException | 出现异常的运算条件时,抛出该异常,如整数运算中的被零除 |
java.lang.ArrayStoreException | 试图将错误对象存储的对象存储到一个对象数组时,抛出该异常 |
java.lang.ClassCastException | 试图将错误对象类型转换为不是实例的子类时 |
抛出和声明异常
对自定义异常类需要使用throw显示抛出,系统预定义的异常类也可以显示抛出
1 | static int method(int a,int b) throws MyException,ArithmeticException{ |
捕获异常
如果程序中没有定义相应的异常捕获代码,按照系统默认的方式进行处理。如果有,那就按照程序中加入相应的异常捕获代码。
异常捕获的基本语法
1 | try{ |
如果在try中发生异常,立即中断现在语句的执行。在catch语句中寻找符合的异常类型,如果找到,那么直接从该catch语句中的第一句语句开始执行,忽略所有catch语句。
如果没有符合匹配,就按默认方式调用方法printStackTrace 在标准错误输出上打印出当前异常名称及其栈追踪信息。然后终止该程序运行。
捕获所有异常
在最后的catch语句后加入一个catch(Exception)类即可,因为所有的这种异常类都继承Exception
1 | try{ |
Finally 语句
为那种不管是否发生异常都需要进行执行的语句服务。finally语句一般用于释放外部资源,比如关闭曾经打开的文件。一般位于最后面,finally语句要在所有catch语句之后
1 | try{ |