一、异常的继承结构
1.Throwable:顶级父类
2、–Error:系统错误,无法修复
2、–Exception:可以通过编程修复的错误
–编程异常–未运行程序–未通过编译–少写了一个{
–runtimeRxception 运行时异常–通过编译,运行时才报错
–IndexOutOfBoundsException–数组下标越界
–InputMismatchException–输入不匹配异常
–ArithmeticException–算术异常
-----
二、异常的解决方案
方案一:自己解决try–catch
try{
可能会出现异常的代码
}catch(异常类型 异常名){
异常解决方案
}
注意:
1.catch可以嵌套【多种处理情况】,
例题:
package cn.tedu.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
//本例用于异常的入门案例
/**1.不要害怕BUG
* 2.学会看报错的提示信息,确定自己的错误方向
* 3、学会看报错的行号信息,确定自己的报错位置
* 注意:要看自己写的代码*/
public class ExceptionDemo {
public static void main(String[] args) {
f1();//调用暴露异常的方法
}
/**
* 异常处理格式:
* try{
* 可能会出现异常的代码
* }catch(异常类型 异常名){
* 解决方案
* }*/
//1.创建一个f1方法用于暴露异常
public static void f1(){
//需求:接受用户输入的两个整数,并打印两个数除法的结果
try{System.out.println("请输入");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入");
int b = new Scanner(System.in).nextInt();
//输入6和0报错ArithmeticException算术异常,除数不能为0
//输入小数,报错InputMismatchException输入类型不匹配异常
//System.out.println("结果"+a/b);
int c=a/b;
System.out.println("结果"+c);
}catch(ArithmeticException e){
System.out.println("算术异常");
}catch (InputMismatchException e){
System.out.println("输入不匹配");
}
/*catch (Exception e){
e.printStackTrace();
System.out.println("错误");
}*/finally {
System.out.println("程序执行完毕");
}
/**try-catch可以嵌套的,如果有多种异常类型需要分别处理的话
* 如果不需要特殊处理,只需要处理,那就不需要嵌套
* 将所有异常的子类型统一看作父亲类型Exception来处理
* 提供通用的解决方案,这是多态最为经典的一种用法*/
}
}
方案二:向上抛出–不自己解决
格式:在方法定义的两个括号之间:throws异常类型1,异常类型2
注意:
1、一个方法会抛出异常,谁调用这个方法,谁就需要处理【捕获或者抛出】这个异常
2、我们一定要在main()调用之前处理掉异常,因为没人处理。
例题:
try {
f3();
}catch (Exception e){
System.out.println("出错啦");
}
//3.创建一个抛出异常的方法
/**异常抛出的格式:在小括号与大括号之间写throws
* 如有多个异常输入,即可*/
private static void f3() throws InputMismatchException,ArithmeticException,Exception{
//3.1复写f1代码
System.out.println("请输入");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入");
int b = new Scanner(System.in).nextInt();
//输入6和0报错ArithmeticException算术异常,除数不能为0
//输入小数,报错InputMismatchException输入类型不匹配异常
//System.out.println("结果"+a/b);
int c=a/b;
System.out.println("结果"+c);
}