第一节 Java异常分类
异常:程序不正常的行为或者状态
- int a = 5 / 0
- 数组越界访问
- 读取文件,结果该文件不存在
异常处理
- 程序返回到安全状态
- 允许用户保存结果,并以适当方式关闭程序
Throwable:所有错误的祖先
Error:系统内部错误或者资源耗尽,不管
Exception:程序有关的异常,重点关注。
- RuntimeException:程序自身的错误,5/0,空指针,数组越界···
- 非RuntimeException:外界相关的错误,打开一个不存在的文件···
第二节 Java异常处理
异常处理:
- 允许用户及时保存结果
- 抓住异常并分析内容
- 控制程序返回到安全状态
try-catch-finally:一种保护代码正常运行的机制
异常结构:
- try...catch(catch可以有多个,下同)
- try...catch...finally
- try...finally
try必须有,catch和finally至少要有一个
try:正常业务逻辑代码。
catch:当try发生异常,将执行catch代码。若无异常,绕之。
finally:当try或catch执行结束后,必须要执行finally。
进入catch块后,并不会返回到try发生异常的位置,也不会执行后续的catch块,一个异常只能进入一个catch块。catch块的异常匹配是从上而下进行匹配的。所以一般是将小的异常写在前面,而一些大的宽泛的异常则写在末尾。
方法存在可能异常的语句,但不处理,那么可以使用throws来声明异常。
调用带有throws异常的方法,要么处理这些异常,或者再次向外throws,直到main函数为止。
第三节 自定义异常
自定义异常,需要继承Exception类或其子类。
- 继承自Exception,就变成Checked Exception,IDE辅助检查
- 继承自RuntimeException,就变成Unchecked Exception,IDE不会辅助检查,程序员自行处理
自定义重点在构造函数
- 调用父类Exception的message构造函数
- 可以自定义自己的成员变量
在程序中采用throw主动抛出异常
Public class MyException extend Exception {
private String returnCode; //异常代码
private String returnMsg; //异常描述信息
public MyException() {
super();
}
public MyException(String returnMsg){
super();
this.returnMsg = returnMsg;
}
public MyException(String returnCode, String returnMsg){
super();
this.returnCode = returnCode;
this.returnMsg = returnMsg;
}
public String getReturnCode() {
return returnCode;
}
public String getReturnMessage() {
return returnMessage;
}
}
throw new MyException(“10001”, “The reason of myException”);