异常

异常

  • 基本概念

程序中执行发生的不正常情况称为异常。(开发中的语法和逻辑错误不是异常)

  • 异常事件可以分为两类
  1. Error(错误)

    Error是JVM无法解决的严重问题,如StackOverflowError栈溢出,OutOfMemory内存溢出等,Error是严重错误,程序会崩溃。

  2. Exception

    一般由程序编程错误或其他偶然外在因素引起的,可以使用针对性代码进行处理。常见的Exception有空指针异常,数组下标越界,网络连接中断等。Exception分为两大类:编译型异常和运行时异常

    • 运行时异常

      编译器不要求强制处理,一般是编程的逻辑错误,是程序员应该避免出现的异常

      运行时异常很常见,可以不处理,如果全处理代码就有很多try-catch,影响可读性和运行效率

    • 编译时异常,编译器要求必须处理的异常,如文件不存在等。

常见的运行时异常

NullPointerException空指针异常

ArithmeticException算数运算异常

ArrayIndexOutOfBoundsException数组下标越界异常

ClassCastException类型转换异常

NumFormatException数字格式不正确异常

异常处理机制

当异常发生时,对异常处理的方式,有两种方式,这里两个方式是互斥的

捕获异常 try-catch-finally

try:监控区域。try块里放有可能发生异常的代码

catch:当try块里发生异常时,系统将异常封装成一个异常对象,传递给catch;

​ 如果try块里没有异常,catch部分就不会执行

finally:无论出不出异常,finally里的语句终究会进行

​ 如果要捕获多个异常,catch的异常从小到大排列

示例代码

    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        try {//监控区域
            System.out.println(a / b);
        } catch (Exception e) {//捕获Exception类异常
            e.printStackTrace();
        } catch (Throwable e) {//捕获Throwable类异常
            e.printStackTrace();
        } finally {//最终执行
            System.out.println("结束");
        }
    }

调用tyr catch快捷键Ctrl + Alt + T

抛出异常

在一个方法可能生成某种异常,但并不能确定如何处理,那么这个方法应该显式声明抛出异常,表明该方法不对这些异常进行处理,由该方法的调用者负责处理

  • throws和throw
  1. throws

    在方法声明throws可以声明抛出的异常列表,thorws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

案例:

public void f(){
    //创建一个文件流对象
    FileInputStream fis = new FileInputStream("d://a.txt");
}

这个代码编译器会报错:FileNotFoundException找不到文件,这是一个编译型异常,我们必须进行处理,处理如下:

public void f() throws FileNotFoundException{
    //创建一个文件流对象
    FileInputStream fis = new FileInputStream("d://a.txt");
}

把这个异常抛出,让方法f( )的调用者(一般来说也是一个方法)来处理,这个throws后面的也可以是Exception,因为是异常FileNotFoundException的父类。

  1. throw

    throw是手动生成异常对象的关键字,它是在方法体中声明,throw后面接的是一个异常对象

public double f1(double a,double b){//简单的除法方法返回 a / b
    if (b == 0){
        throw new ArithmeticException("除数为0")
    }
    return a / b;
}

这里就是主动的抛出异常对象

  1. throw和throws区别
意义 位置 后面跟的东西
throws 异常处理的一种方式 方法生命处 异常类型
throw 手动生成异常对象的关键字 方法体中 异常对象
posted @ 2021-10-24 19:54  独高的浮云  阅读(68)  评论(0)    收藏  举报