Java 异常。【⭐⭐⭐】:

经常的问法是异常可以分为哪几种,然后你答了可检查异常和不可检查异常以后,会让你举例可检查异常有哪些,不可检查有哪些。然后,异常的代码要会写,有一场字节的面试,直接让我写一个把异常捕获了然后抛出去的代码。

img

ExceptionError 二者都是 Java 异常处理的重要子类,各自都包含大量子类。

  • Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 受检查异常(必须处理) 和 不受检查异常(可以不处理)。
  • ErrorError 属于程序无法处理的错误 ,我们没办法通过 catch 来进行捕获 。例如,Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。

受检查异常

Java 代码在编译过程中,如果受检查异常没有被 catch/throw 处理的话,就没办法通过编译 。比如下面这段 IO 操作的代码。

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常 。常见的受检查异常有: IO 相关的异常、ClassNotFoundExceptionSQLException...。

不受检查异常

Java 代码在编译过程中 ,我们即使不处理不受检查异常也可以正常通过编译。

RuntimeException 及其子类都统称为非受检查异常,例如:NullPointerExceptionNumberFormatException(字符串转换为数字)、ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类型转换错误)、ArithmeticException(算术错误)等。

package javaBasics;

public class test5 {

    public static void main(String[] args) {
        int i = 10;
        int j = 0;
        try{
        int temp = i/j;                        //此处会产生异常
        System.out.println("计算结果:"+temp);
        }catch(Exception e){
            System.out.println("出现异常:"+e);    //打印异常信息
            e.printStackTrace();            //打印完整的异常信息
        }finally{
            System.out.println("不管是否出现异常都执行此代码");
        }
        System.out.println("计算结束");
    }

}