异常的概述
异常:应用程序在运行的过程中发生的使程序意外终止的情况。
异常的分类
异常的顶级父类:Throwable
子类:Error | ----Exception
|--- 运行时异常(unchecked异常)-----》RuntimeException
|-- 编译期异常(checked异常)====》除了RuntimeException以及其子类,其他的异常我们都认为是编译期异常
可以处理的异常:Exception
无法通过程序处理的异常:Error 例如:内存溢出、JVM奔溃、蓝屏、电脑冒烟
例一、需求说明:在程序中实现两个数字求商的功能。当除数为0时,正确使用try-catch捕捉如图所示的程序异常。
package day10.demo3;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
try {
Scanner input=new Scanner(System.in);
System.out.print("请输入被除数:");
int num1=input.nextInt();
System.out.print("请输入除数:");
int num2=input.nextInt();
int result = num1 / num2;
System.out.println("除法计算结果是:" + result);
} catch (Exception x){
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
x.printStackTrace();
}
}
}
例二、需求说明:在作业1的基础上,在try-catch块后加入finally块,。(注意:一般情况下finally中的代码不论程序是否发生异常都会执行,不执行的唯一情况是使用System.exit(1); 中断程序,退出Java虚拟机)
package day10.demo3;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
try {
Scanner input=new Scanner(System.in);
System.out.print("请输入被除数:");
int num1=input.nextInt();
System.out.print("请输入除数:");
int num2=input.nextInt();
int result = num1 / num2;
System.out.println("除法计算结果是:" + result);
}catch (Exception e){
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
}finally {
System.out.println("感谢使用本程序!");
}
}
}
例三、需求说明:当在try块中和catch块中包含return语句时,return语句在执行前,会先执行finally语句。请大家在作业2的基础上加入return语句,执行如图所示的效果。(提示:可在程序中加入打断点,观察程序的执行过程)
package day10.demo3;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
try {
Scanner input=new Scanner(System.in);
System.out.print("请输入被除数:");
int num1=input.nextInt();
System.out.print("请输入除数:");
int num2=input.nextInt();
int result = num1 / num2;
System.out.println("除法计算结果是:" + result);
}catch (Exception e){
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
return;
}finally {
System.out.println("感谢使用本程序!");
}
}
}