一、异常概述与异常体系结构
再使用计算机语言进行项目开发的过程中,即使代码写得尽善尽美,在系用运行的过程中仍然可能会遇到一些问题,比如客户输入数据的格式,读取文件是否存在,网络是否始终保持畅通等等。
Java程序在执行的过程中所发生的异常事件可分为两类:
●Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。 一般不编写针对性的代码进行处理。
●Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:
➢空指针访问
➢试图读取不存在的文件
➢网络连接中断
➢数组角标越界
二、常见异常
异常的体系结构
异常的处理:抓抛模型
●过程一 “抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。并将此对象抛出。一旦抛出对象以后,其后的代码就不再执行。
●过程二 “抓”:可以理解为异常的处理方式:①try-catch-finally ②throws
三、异常处理机制1:try-catch-finally
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
}catch(异常类型2 变量名2){
//处理异常的方式2
}catch(异常类型3 变量名3){
//处理异常的方式3
}
...
finally{
//一定会执行的代码
}
说明:
1.finally是可选的,代码一定会执行。
2.catch中的异常类型如果满足子父类关系,子类一定在父类上面。
3.常用的异常对象处理的方式:① String getMessage() 、 ② printStackTrace()
4.在try结构中声明的变量,在出了try结构以后就不能被调用。
5.像数据库连接,输入输出流,网络编程Socket等资源,JVM是不能自动回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。
6.try-catch-finally结构可以嵌套。
四、异常处理机制2:throws + 异常类型
说明
1.try-catch-finally是真正的将异常处理掉了,throws的方式只是将异常抛给了方法的调用者。并没有真正将异常处理掉。异常代码后续的代码,就不再执行。
2.子类重写的方法抛出的异常类型不大于父类被重写方法抛出的异常类型。
3.如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。
4.执行的方法a中,先后又调用了另外几个方法,这几个方法是递进关系进行的。我们建议这几个方法使用throw的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。
五、手动抛出异常
throw + 异常类型
throw和throws区别:
throw 表示抛出一个异常类的对象,生成异常对象的过程,声明在方法体内。
throws 属于异常处理的一种方式,声明在方法的声明处。
六、自定义异常类
创建一个类继承于现有的异常结构。
提供全局常量:serialVersionUID
public class MyException{
static final long serialVersionUID = -1313153456464L;
public MyException(){
}
public MyException(String msg){
super(msg);
}
}