内容正文:
单元8 异常处理
了解错误与异常的关系,能够在实际应用中分类处理。
掌握异常的处理机制,能够使用try…catch…finally 模块捕获并处理异常。
理解throw 和throws 的区别,能够自主抛出异常并为方法声明异常。
掌握异常的自定义方法,能够根据实际需要自定义异常。
学习目标
company profile
异常的实质是看似完美的程序,却在应用中因为各种不可预知事件的发生而出现错误。使用异常捕捉与处理模式虽然不能在事故中彻底挽救程序,却可以给用户一个好的体验,减少用户的损失,使用户在遇到故障时不至于手足无措。同样的道理也体现在现实生活中,面对错综复杂的人生,我们如何保持初心,如何应对负能量?我们是否为每一个决策、每一件事预留好try…catch 的空间;是否为他人预留了一定的空间,从而避免他人对我们启动危机处理机制。
思政目标
company profile
1. 语法错误
语法错误包括大小写错误,缺少分号等。存在语法错误的程序不能通过编译,也不能运行。
2. 逻辑错误
这种程序严格来讲是“正确”的程序,能够通过编译并成功执行,只是运行结果和预期不一致。这种错误排查起来比较困难。
3. 异常错误
异常错误是指程序能够通过编译,但在运行过程中发生了错误。如数组越界、除法溢出、操作时未找到文件等。
8.1 错误与异常
company profile
8.1.1 错误的分类
程序在设计与运行中可能会出现以下3 种错误:
捕获异常主要使用try、catch、finally 语句块:try 尝试运行,catch 捕获各种可能的异常,finally 是最后的处理模块。捕获的异常类对象既可以是系统已经定义好的,也可以是用户使用throw 语句抛出的自定义异常。例如,进行人员管理时,可以定义年龄小于0 和大于150 为异常。如果在一个方法内部,没有立即捕获并处理可能发生的异常,就需要在方法名的后面使用throws 语句声明,以便上层应用程序捕获并处理。
8.1.2 异常处理机制
company profile
方法一:不加任何限制,当输入不合理时,程序发生异常并终止。
import java.util.Scanner;
public class myExecption {
public static void main(String args[]){
Scanner xin= new Scanner(System.in);
int a,b,c;
System.out.println(" 输入被除数和除数");
a=xin.nextInt();
b=xin.nextInt();
c=a/b;
System.out.println(a+" 除以"+b+" 的商为"+c);
}
}
【实例1】 除数为0 的异常。
除数为0 是初学者经常遇到的异常。本实例介绍了两种应对方法:一种是不加任何限制,当输入不合理时,程序发生异常并终止;另一种是采取一定的方法来避免异常的发生。
输入被除数和除数
96( 回车) 25( 回车)
96 除以25 的商为3
再次运行
输入被除数和除数
96( 回车) 0( 回车)
Exception in thread "main" java.lang.ArithmeticException: / by zero
at myExecption.main(myExecption.java:9)
提示发生了除数为0 的异常。
【运行结果:】
company profile
方法二:采取一定的方法来避免异常的发生。
company profile
import java.util.Scanner;
public class myExecption {
public static void main(String args[]){
Scanner xin= new Scanner(System.in);
int a,b,c;
System.out.println(" 输入被除数和除数");
a=xin.nextInt();
b=xin.nextInt();
int i=0;
while(b==0){
System.out.println(" 除数不能为0,请重新输入除数");
b=xin.nextInt();
if(i++>3) return;
}
c=a/b;
System.out.println(a+" 除以"+b+" 的商为"+c);
}
}
输入被除数和除数
96( 回车) 0( 回车)
除数不能为0,请重新输入除数
3
96 除以3 的商为32
本实例中我们自己进行了除数为0 的判断:如果除数为0,输出“除数不能为0,请重新输入除数”的提示。没有出现异常。
【运行结果:】
company profi