什么是异常?
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
程序运行 --->异常-----> 程序中断运行
生活中面对异常通常会这样处理:
- 堵车! 绕行或者等待
- 撞车! 请求交警解决
- 生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活
什么是异常处理?
Java编程语言使用异常处理机制为程序提供了错误处理的能力
程序中预先设置好对付异常的处理办法 ---> 程序运行---> 异常
对异常进行处理------->处理完毕,程序继续运行
Java中如何进行异常处理?
Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws
捕获异常 声明异常
try 声明方法可能要 产生异常的代码
catch 捕获异常
finally 无论是否发生异常,代码总能执行
throws 声明方法可能要抛出的各种异常 声明异常
throw 手动抛出异常 抛出异常
try-catch块
使用try-catch块捕获异常,分为三种情况:
第一种情况 :正常
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
try ------
catch
try-catch
块后的代码段
第二种情况:出现异常
使用try-catch块捕获异常,分为三种情况:
public void method(){
try {
// 代码段 1
//产生异常的代码段2
//代码段3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
异常是一种特殊的对象,类型为
java.lang.Exception
或其子类
第三种情况:异常类型不匹配
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
try--->发生异常---->产生异常对象 ---> 异常类型不匹配---->程序中断运行
System.err.println("出现错误:被除数和除数必须是整数, ”+"除数不能为零。");
e.printStackTrace();
▪
调用方法输出异常信息
方法名 | 说明 |
void printStackTrace() | 输出异常的堆栈信息 |
String getMessage() | 返回异常信息描述字符串,是printStackTrace()输出信息的一部分 |
异常类型 | 说明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
try-catch-finally
在try-catch块后加入finally块
– 是否发生异常都执行
– 不执行的唯一情况
– 不执行的唯一情况
存在return的try-catch-finally块
public void method(){
{
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
执行return退出方法
} {
// 代码段 4
}
}
多重catch块
▪ 引发多种类型的异常
– 排列catch 语句的顺序:先子类后父类
– 发生异常时按顺序逐个匹配
– 只执行第一个不异常类型匹配的catch语句
public void method(){
try {
// 代码段
// 产生异常(异常类型2)
} catch (异常类型1 ex) {
// 对异常进行处理的代码段
} catch (异常类型2 ex) {
// 对异常进行处理的代码段
} catch (异常类型3 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
自定义异常
何时需要自定义异常?
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类
使用自定义异常的步骤:
1.定义异常类
2.编写构造方法,继承父类的实现
3.实例化自定 义异常对象
4.使用throw
抛出
继承Excepion 或者RuntimeException