异常的捕获和处理
1.认识异常
异常是指在程序的运行过程中所发生的不正常事件,如所文件找不到,、网络链接不通或链接中段、算数运算符出错、
数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。异常会中断正在运行程序
2.java异常结构体体系
所有异常类都是Throwable类的子类,他派生了两个子类:Error类和Exceotion类
Error类:表示仅靠程序本身无法恢复的严重错误,假如出现这种错误应尽力使程序安全退出
Exceotion:java应用程序抛出和处理的非常严重错误,又分为两大类异常
1)运行时异常:包括RuntimeException及其所有子类。
2)Cheked:除了运行时异常外的其他从Exception类继承出来的异常类
java异常处理机制
1)使用try-catch处理异常
在eatch语句块中可以加入用户自定义处理信息,也可以调用异常对象的方法输出异常信息常用的方法如下
void printStackTrace():输出异常的堆栈信息。堆栈信息包括程序运行到当前类的执行流程,他将输出从方法调用出到异常抛出的方法调用序列
String getMessage(): 返回异常信息描述字符串,该字符串描述了异常产生的原因,是 printStackTrace()输出信息的一部分
2)使用try-catch-finally处理异常
语句块的执行流程大致分为两种情况
如果try语句块中所有语句正常执行完毕,finall语句块也会被执行
如果try语句块在执行过程中发生异常,无论这种异常能否被catch语句块捕获到都将执行发finally语句块中的代码
3)使用多重catch处理异常
一段代码可能引发多种类型的异常,这时可以在try语句块后面多跟个catch语句块分别处理不同的异常,但排列的顺序必须是从子类到父类,
最后一个一般都是Exceotion类,因为按照匹配原则,如果把父类放到前面,后面的catch语句快将不会获得执行机会
运行时,系统从上到下分别对每个catch语句块处理的异常类性进行检测,并执行第一个异常类型匹配的catch语句,执行其中一条catch语句之后,其后的catch语句将被忽略。
4)使用throws声明抛出异常
5)使用throw抛出异常
throw和throws的区别
(1)作用域不同:throw用于程序员自行产生并抛出异常。throws用于声明该方法内抛出了异常
(2)使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表后面,不能单独使用
(3)内容不同: throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个。
6)自定义异常
使用自定义有如下几个步骤
定义异常类,并继承Excepion或者RunntimeException
编写异常类的构造方法,并继承父类的实现
7)异常连