异常是什么?
异常是java特有的问题处理机制,用来封装错误信息的对象,包含错误类型,错误提示,以及出现错误的行号
异常的继承结构
- Throwable–顶级父类
-
- Error–系统错误,无法修复
-
- Excepiton–可以修复的错误,就是我们常说的异常
-
-
- RunTimeExcepiton
-
-
-
-
- ClassCastException
-
-
-
-
-
- ClassNotFoundException
-
-
-
-
-
- …
-
-
异常的处理方式
当程序中遇到了异常之后,我们有两种方式可以处理
1)向上抛出异常,不解决
2)捕获异常并处理异常
try{
}catch(异常类型){
处理方式;
}
ex1:最容易遇到的异常就是算术异常,比如除数不能为0
package tedu.day09_exception;
import java.util.InputMismatchException;
import java.util.Scanner;
/**本类用于测试一场的入门案例*/
/**
* 总结8:
* 如果方法抛出异常,那么谁调用,谁需要解决(继续抛出/捕获解决)
* 所以main()调用了method2(),如果main()不捕获处理,就也需要抛出异常
* 注意:我们一般在main()调用之前捕获解决异常,而不是吧问题抛给main()
* 因为没人解决了
*/
public class Test1_ExceptionDemo {
//1.创建入口函数main()
public static void main(String[] args) throws Exception{
//method();//调用method()--暴露异常
//method1();//调用method1()--异常捕获
method3();
}
//创建method3(),练习BUG解决方案二
/**抛出的语法规则
* 在可能会出现异常的方法上加throws 异常类型
* 在抛出时,也可以使用多态,不管是发生了声明异常,通通被Exception
*/
//public static void method3() throws InputMismatchException ,ArithmeticException,Exception{
private static void method3() throws Exception{
System.out.println("请输入您要计算的第一个数");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数");
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);
}
//3.创建method1(),练习BUG解决方案一
/**捕获的语法规则
* try{
* 可能会出现异常的代码
*}catch(异常类系ing 异常参数名)
*/
private static void method1() {
//3.1按照学习的捕获语法编写try-catch结构
/**总结4:try中放着的是可能会出现异常的代码*/
try{
//3.2复写刚刚可能会发生异常的代码
System.out.println("请输入您要计算的第一个数");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数");
int b = new Scanner(System.in).nextInt();
/**总结5:如果发生异常被捕获,就执行此处被匹配到的解决方案*/
}catch(InputMismatchException e){//3.3异常捕获1
System.out.println("输入的类型不正确,请输入正确的整数类型");
/**总结6:由于程序中可能出现多种异常,所以catch可以配合多次使用*/
}catch(ArithmeticException e){//3.4异常捕获2
System.out.println("第二个数不能为0!!");
/**总结7:如果还有上述两种异常之外的异常,用Exception匹配捕获
* 这个就是多态最为经典的一种用法,我们不关心子类的子类
* 只要是可解决的异常,都是Exception的子类,多态会把这些异常当作父类型来看
* 进而捕获,使用通过异常解决方案来解决
*/
}catch(Exception e){
System.out.println("请输入正确的整数~");
}
}
//2.创建method()用来人为的暴露异常
private static void method() {
//2.1提示并接受用户输入的两个整数
System.out.println("请输入您要计算的第一个数");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数");
int b = new Scanner(System.in).nextInt();
//2.2分别输出运算的结果
//输入不匹配的异常5
System.out.println(a + "+" + b + "=" + (a + b));
System.out.println(a + "-" + b + "=" + (a - b));
System.out.println(a + "*" + b + "=" + a * b);
System.out.println(a + "/" + b + "=" + a / b);
/**1.不要害怕BUG,真正的勇士敢于直面自己写的BUG
* 2.学会看报错信息的错误提示,确定自己错误的方向
* 3.学会看报错信息的行号提示,哪里报错点哪里
* 源码不会错,要看的是自己写的代码*/
}
}