目录
第七章 异常
1.异常
2.处理方法
2.1.try-catch
2.2.多重catch块
2.3.finally
2.4.throw 与 throws
2.5.程序分析
3.自定义异常
内容仅供学习交流,如有问题请留言或私信!!!!!
有空您就点点赞
1.异常
什么是异常:指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。
异常分为Checked异常和运行时异常:
- Checked异常必须捕获或者声明抛出
- 运行时异常不要求必须捕获或者声明抛出
常见的异常类型:
异常类型 | 说明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
2.处理方法
Java中的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws
2.1.try-catch
正常情况:执行 try-catch 后的代码段
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
出现异常:捕获异常,异常是一种特殊的对象,类型为java.lang.Exception或其子类
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
异常类型不匹配:
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
- catch块中处理异常
- 加入用户自定义处理信息
- 调用方法输出异常
e.printStackTrace();
- 异常对象常用的方法
方法 | 说明 |
void printStackTrace() | 输出异常的堆栈信息 |
String getMessage() | 返回异常信息描述字符串, 是printStackTrace()输出信息的一部分 |
2.2.多重catch块
- 引发多种类型的异常
- 排列catch语句顺序:先子类后父类
- 发生异常时按顺序逐个匹配
- 只执行第一个与异常类型匹配的catch语句
2.3.finally
- try-catch 后加finally块
- 是否发生异常都执行
- 不执行的唯一情况(System.exit(1))
2.4.throw 与 throws
使用throws声明异常:
方法() throws 异常类型1,异常类型2 { }
- throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开。
- 方式1:调用者处理异常
- 方式2:调用者继续声明异常
- main()方法声明的异常由Java虚拟机处理
使用throw抛出异常:
throw new 异常类型( );
eg:
throw new MyStackOperationException("xxxx,xxxx");//手动抛出异常
throw 与 throws的区别:
throw | throws |
生成并抛出异常 | 声明方法内抛出了异常 |
位于方法体内部,可作为单独语句使用 | 必须跟在方法参数列表后面,不能单独使用 |
抛出一个异常对象,且只能是一个 | 声明抛出异常类型,可以跟多个异常 |
异常体系结构:
2.5.程序分析
try-catch-finally中存在return语句的执行顺序:
package dh07;
public class A {
public int getInt(int i) {
try {
i++;
return i;
} catch (Exception e) {
i++;
}finally {
i++;
}
return 0;
}
}
//----------------------------------
package dh07;
public class test {
public static void main(String[] args) {
A a = new A();
a.getInt(1);
System.out.println(a.getInt(1));
}
}
输入 i=1 ,代码执行结果是:2,但此时 finally = 3
3.自定义异常
使用步骤:
- 定义异常类(异常继承 Exception 类或者 RuntimeException)
- 编写构造方法,继承父类的实现
- 实例化自定义异常对象
- 使用throw抛出
异常的处理原则:
- 异常处理与性能
- 异常只能用于非正常情况
- try中不能存放大量代码
- catch中制定具体的异常类型
- 需要对捕获的异常做处理