异常
我们在测试程序中发现问题
Exception 在程序的运行过程中 发生了不正常的现象 阻止了程序的运行 称之为发生异常
如下面求和
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int num1 = sc.nextInt();
System.out.println("请输入第二个数");
int num2 = sc.nextInt();
System.out.println("商:" + num1 / num2);
}
}
程序运行时 我们除数输入0 或者字符就会报错
我们可以选择用if-else处理异常
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
if (sc.hasNextInt()) {
int num1 = sc.nextInt();
System.out.println("请输入第二个数");
if (sc.hasNextInt()) {
int num2 = sc.nextInt();
if (num2 == 0) {
System.out.println("对不起 除数不能为0");
} else {
System.out.println("商:" + num1 / num2);
}
}else {
System.out.println("对不起 你录入的不是int类型的数");
}
}else {
System.out.println("对不起 你录入的不是int类型的数");
}
}
}
但是有缺点 代码臃肿 业务代码和处理异常的代码混在一起 可读性差 很难堵住所有漏洞
基于if-else处理异常缺点太多 所以java中专门出了一个异常处理机制
异常三连 try-catch-finally
异常出现了怎么看
捕获异常 try——catch
public class Test2 {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int num1 = sc.nextInt();
System.out.println("请输入第二个数");
int num2 = sc.nextInt();
System.out.println("商:" + num1 / num2);
}catch (Exception ex){
System.out.println("对不起 出错了");
}
System.out.println("谢谢你使用计算器111");
System.out.println("谢谢你使用计算器111");
System.out.println("谢谢你使用计算器111");
System.out.println("谢谢你使用计算器111");
}
}
原理
把可能出现异常的代码放到try中 然后将异常封装成对象 将catch后面的()中的那个异常对象接收 接收以后 执行后面的()里面的代码块 然后try——catch后面的代码该怎么执行怎么执行
如果
try没有异常 catch中代码不执行 后续的代码继续执行
如果catch异常的类型和你出的异常的类型匹配的话 走catch中的代码---》进行捕获 后续的代码继续执行
如果catch异常的类型和你出的异常的类型不匹配的话 不走catch中的代码---》没有捕获成功 程序相当于遇到异常了 中断了 后面代码不执行
catch中处理异常的方式
第一种 什么都不做 什么都不写
第二种 添加友好性提示 输出自定义信息
第三种 打印异常信息
1.调用toString方法 打印全限定路径
2.显示异常描述信息对应的字符串 如果没有就显示null
3.显示异常的堆栈信息 将异常信息捕获后 在控制台将异常的效果给我们展示出来 方便我们查看异常