> 本BLOG上原创文章未经本人许可,不得用于商业用途。转载请注明出处,否则保留追究法律责任的权利。
-
基本概念
异常就是"不正常"的含义,在Java语言中用于表示运行阶段发生的错误。
java.lang.Throwable类是Java语言中所有错误(Error)和异常(Exception)的超类。
其中Error类主要用于描述比较严重无法编码解决的问题,如:JVM挂机。
其中Exception类主要用于描述比较轻微可以编码解决的问题,如:0作为除数。 -
基本分类
java.lang.Exception类是所有异常类的超类,主要分为以下两大类:
RuntimeException - 运行时异常,也叫作非检测性异常
IOException和其它异常 - 其它异常,也叫作检测性异常所谓检测性异常就是在编译阶段能够被编译器检测出来的异常
其中RuntimeException类的主要子类(Java开发中五种常见异常):
ArithmeticException - 算术异常
ArrayIndexOutOfBoundsException - 数组下标越界异常
NullPointerException - 空指针异常
ClassCastException - 类型转换异常
NumberFormatException - 数字格式异常注意:
当程序执行过程中发生异常但没有手动处理时,由Java虚拟机采用默认方式处理,而默认处理方式就是:打印异常名称、异常原因、异常发生的位置等并终止程序。 -
框架图
-
异常的避免
在开发中尽量使用if条件判断来避免异常的发生。
-
异常的捕获
-
语法格式
try { 编写可能发生异常的语句; } catch(异常类型 变量名) { 编写针对该类异常的处理语句; } ... finally { 编写无论是否发生异常都应该执行的语句; }
-
注意
a.当需要编写多个catch分支时,切记小类型的异常应该放在大类型异常的上面。
懒人的写法:
catch(Exception e){ … }
b.finally主要用于编写善后处理的语句,如:关闭已经打开的文件等。 -
执行流程
try { a; b; - 可能发生异常的语句 c; } catch(...) { d; } finally { e; }
当上述程序执行过程没有发生异常时的执行流程:a b c e;
当上述程序执行过程发生异常时的执行流程:a b d e;
-
-
异常的抛出
-
基本概念
在某些特殊情况下产生的异常无法处理或者不便于处理时,就可以将该异常转移给该方法的调用者,这种方式就叫做异常的抛出。
-
语法格式
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1, 异常类型2, …{}; 如:
public void show() throws IOException {}
-
方法重写的原则
a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型
b.要求方法的访问权限不能变小,可以相同或者变大
c.要求不能抛出更大的异常
-
-
自定义异常
-
基本概念
虽然Java官方提供了大量的异常类,但一定不会包含所有开发中可能出现的异常,在Java程序中若需要表达特定问题的特定异常时,就需要程序员自定义异常来描述。
-
实现流程
a.自定义xxxxException继承自Exception类或者其子类;
b.提供两个版本的构造方法:无参构造方法 和 字符串作为参数的构造方法;
-