Java异常


异常简单分类

  1. 三种类型异常

    • 检查性异常
    • 运行异常
    • 错误
  2. Java将异常当做类来处理,并定义了一个java.lang.Throwable作为所有异常的超类,异常类主要分为Error和Exception两大类

1652181142009

捕获和抛出异常

  1. 抛出异常

  2. 捕获异常

  3. 异常处理五个关键字try、catch、finally、throw、throws

    • try: 监控异常, try出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。
    • catch:捕获异常, catch出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。 可以多次使用,但要异常类型从小到大写,将最大的异常类型放到后面。异常类型由大到小为Throwable->Error或 Exception_>......
    • finally:处理善后,不管是否捕获到异常均会执行,可以不使用,一般在IO中发生异常后关闭资源
    • throw:主动抛出异常, throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw。
    • throws: throws出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型
  4. IDEA抛出异常快捷键

    ? 选中可能出现异常的代码->ctrl+alt+T

  • try-catch-finally
public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        try{//try监控区域
            System.out.println(a/b);
        }catch(ArithmeticException e){//catch捕获异常
            System.out.println("除法分母不能为0");
        }catch(Exception e){
            System.out.println("除法分母不能为0");
        }finally{//处理善后工作
            System.out.println("finally");
        }
    }
}
  • throw
package com.yang;
public class Test {
    public static void main(String[] args) {
        new Test().test(1,0);
    }

    public void test(int a,int b){
        if (b==0){//当出现异常时,使用throw主动抛出异常
            throw new ArithmeticException();
        }
    }
}
结果:
Exception in thread "main" java.lang.ArithmeticException
	at com.yang.Test.test(Test.java:9)
	at com.yang.Test.main(Test.java:4)
  • throws
package com.yang;
public class Test {
    public static void main(String[] args) {
        try {
            new Test().test(1,0);
        } catch (ArithmeticException e) {//继续使用try-catch处理throws抛出的异常
            e.printStackTrace();
        } finally {
        }
    }
    public void test(int a,int b) throws ArithmeticException{//假设这个方法处理不了异常,使用throws方法抛出异常
        if (b==0){
            throw new ArithmeticException();
        }
    }
}

自定义异常

  • 用户自定义异常只需要继承Exception类即可
  • 自定义异常大体分为以下几步
    1. 创建自定义异常类
    2. 在方法中通过throw关键字抛出异常对象
    3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
    4. 在出现异常方法的调用者中捕获并处理异常