异常

异常(Exception)

异常

  • 检查性异常
  • 运行时异常
  • 错误(Error)

异常通过各种意义上可以分为不同的类别,比如分为运行时异常和非运行时异常,也可以分为异常和错误。

Error和Exception的区别:

Error通常是灾难性的致命性的错误,是程序无法处理的,当出现这种异常时,Java虚拟机(JVM)一般会选择终止线程

Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常

异常体系结构

Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类

在Java API很中已经定义了许多异常类,这些异常类又被分为两大类,错误(Error)和异常(Exception)

1-1663752290456

异常处理机制

异常处理的五个关键字

  • try、catch、finally、throw、throws

try、catch、finally的用法

try、catch、finally一般连用,finally可选,try、catch必须存在

注:异常处理的实现机制有点类似选择结构的Switch ,一层层筛选到最后执行(Finally如果存在则一定执行)

源代码

零不能作为除数的异常

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        System.out.println(a / b);
    }
}
运行结果

2-1663752290344


利用try、catch、finally 监控、捕获、处理异常

源代码
public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        //假设要捕获多个异常,类要从小到大排列 否则会报错
        try {//try 监控区域
            System.out.println(a/b);
        }catch (Error e){ //catch(捕获想要的异常类型) 捕获异常 这里的形参应该为异常类和对象
            System.out.println("Error");
        }
        catch (Exception e)
        {
            System.out.println("Exception");
        }catch (Throwable t){
            System.out.println("Throwable");
        }
        finally{ //处理善后工作(如果存在则必定执行)
            System.out.println("Finally");
        }
        //finally关键字可选
    }
}

运行结果

3


在idea中,选择代码后,快捷键ctrl+alt+d快捷键可以使代码被...环绕

4


throw 和 throws 总结

虽然系统没有throw也要把异常抛回给上层调用,但是用户一般习惯于把自己所知的异常用throw抛出,在调用层使用catch来捕获异常,这样相呼应就写成了异常的处理方法。而一般没有写throw的异常基本都是用户预期之外发生的异常。

throws 关键字和 throw 关键字在使用上的几点区别如下:

  1. throws 用来声明一个方法可能抛出的所有异常信息,表示出现异常的一种可能性,但并不一定会发生这些异常;throw 则是指拋出的一个具体的异常类型,执行 throw 则一定抛出了某种异常对象。
  2. 通常在一个方法(类)的声明处通过 throws 声明方法(类)可能拋出的异常信息,而在方法(类)内部通过 throw 声明一个具体的异常信息。
  3. throws 通常不用显示地捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw 则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后将包装后的异常信息抛出。

注:经测试 idea编译器严格要求throws抛出异常后,上层需要捕获才能编译通过