第七章 异常
文章目录
异常
什么是异常
异常是指在程序的运行过程中所发生的不正常的事件
什么是异常处理
Java编程语言使用异常处理机制为程序提供了错误处理的能力
Java中如何进行异常处理
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
throws:声明方法可能要抛出的各种异常
throw:手动抛出异常
try-catch块
//第一种情况 :正常
//不会执行catch中代码
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
//第二种情况:出现异常
//try发出异常 产生异常对象 异常类型匹配 进入catch 程序继续执行
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
//第三种情况:异常类型不匹配
//try发生异常 产生异常对象 异常类型不匹配 程序中断运行
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程
java.util.InputMismatchException //异常类型
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at cn.jbit.exception.Test3.main(Test3.java:15)//出现异常的位置
在catch块中处理异常
n加入用户自定义处理信息
System.err.println("出现错误:被除数和除数必须是整数 ");
调用方法输出异常信息
e.printStackTrace();
异常对象常用的方法

常见的异常类型

try-catch-finally
在try-catch块后加入finally块
是否发生异常都执行
不执行的唯一情况
在catch块中System.exit(1)推出Java虚拟机
存在return的try-catch-finally块
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
//1.try发生异常 产生异常对象 异常对象匹配 2.进入catch快 3.执行finally 4.执行return退出方法
u引发多种类型的异常
n排列catch 语句的顺序:先子类后父类
n发生异常时按顺序逐个匹配
n只执行第一个与异常类型匹配的catch语句
try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
抛出异常
声明异常
方式1:调用者处理异常
方式2:调用者继续声明异常
main()方法声明的异常由Java虚拟机处理
抛出异常
除了系统自动抛出异常外,有些问题需要程序员自行抛出异常
使用throw抛出异常
throw与throws

自定义异常
u当JDK中的异常类型不能满足程序的需要时,可以自定义异常类
u使用自定义异常的步骤

异常链
A方法调用B方法时,B方法却抛出了异常。那A方法继续抛出原有的异常还是抛出一个新异常呢
n抛出原有的异常:lA方法与B方法进行了关联,不便于代码的修改和扩展
n抛出新的异常
异常处理原则
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理
总结
异常分为Checked异常和运行时异常
Checked异常必须捕获或者声明抛出
运行时异常不要求必须捕获或者声明抛出
理与性能**
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理
总结
异常分为Checked异常和运行时异常
Checked异常必须捕获或者声明抛出
运行时异常不要求必须捕获或者声明抛出
250

被折叠的 条评论
为什么被折叠?



