一、处理异常的目的
很多时候我们处理异常并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行
二、jvm默认处理异常的过程
1.打印错误信息
a.异常名称,例如: java.lang.ArithmeticException
b.异常的消息 / by zero
c.异常所发生的方法位置
d.异常所在Java文件中
e.异常发生行号
2.终止程序
System.exit(0);
JVM处理异常的方式不能够满足我们开发的需求,那么我们需要自己处理异常.
三、处理异常的方式
方式一: try...catch..finally
方式二: 在含有异常的方法上写上:“throws+可能异常异常名”,可将异常问题抛给调用者来处理
方式一处理异常:
异常处理的格式:
try{
//放置程序可能出现问题的代码
}catch(异常类 异常名){
//这里放置异常处理的代码
}finally{
//释放资源
}
注意:
1. try块的代码越少越好
2. try块中一旦发生异常,那么try块中发生异常,后面所有的代码都不会被执行
3. 多个catch块只会执行与之相匹配的一个
4. 若使用Exception接收异常必须放在异常的最后面,满足先子类后父类
四、异常的执行流程
1.程序执行到错误行,系统会创建一个异常对象,并且抛给我们,例如:
ArithmeticException exception = new ArithmeticException("/by zero");
throw exception ;
2.程序进入catch块进行逐个匹配
若匹配成功,程序执行catch块代码(程序可继续运行)
ArithmeticException ae = exception ;
Exception e = exception ;
若匹配失败,则会交给jvm来处理(让程序挂掉)
五、处理异常的标准方式
1.能够显示处理的尽量显示处理,提高程序的可读性
2.但是一定要在异常处理的最后加上父类Exception处理,防止系统将异常交给虚拟机来处理
六、throw和throws的区别
1. throws出现在方法的声明上,throw关键出现在方法内
2. throws表示一种异常的可能性,throw表示程序的必然性
3. throws可以声明多个异常类,throw只能够抛出一个异常
4. throws声明的是异常类,throw抛出的是异常对象
七、自定义一个异常类来处理异常
package ILikeJava;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入分数");
double score = input.nextDouble();
Teacher123 t = new Teacher123();
try {
t.checkScore(score);
System.out.println("合法分数,输入成功");
} catch (WrongInputException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
input.close();
}
}
}
class Teacher123 {
public boolean checkScore(double score) throws WrongInputException {
if (score > 100 || score < 0) {
throw new WrongInputException("分数不合法,需在0-100之间");
}
return true;
}
}
class WrongInputException extends Exception {
private static final long serialVersionUID = 1L;
public WrongInputException() {
}
public WrongInputException(String message) {
super(message);
}
}