Java异常

  1. 检查性异常
    用户错误或问题引起的异常,比如打开一个不存在文件时,程序员无法预见。
  2. 运行时异常
    是可能被程序员避免的异常。与检查性异常相反,编译不会报错,运行时才会报错。
  3. 错误
    不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略,比如栈溢出,一个错误就发生了,它们在编译时也是检查不到的。

异常体系结构

  • Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超累
  • Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception

错误

异常

  • 运行时异常在代码编写的时候是不容易发现的,但是运行时会报错,所以也称为非检查性异常
  • 非运行时异常和错误在代码编写的时候是可以被发现的,所以也称为检查性异常

异常处理机制

  • 抛出异常
  • 捕获异常
  • 异常处理的5个关键字
    try、catch、finally、throw、throws
    方法头部抛出异常用throws、方法体内抛出异常用throw

``java
package com.crazygod.exception;

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

    // 假设捕获多个异常,从小到大

    try { // 监控区域
        System.out.println(a / b);
    } catch (ArithmeticException e) { // 捕获异常
        System.out.println("程序出现异常,变量b不能为0");
    } catch (Error e) {
        System.out.println("Error");
    } catch (Exception e) {
        System.out.println("Exception");
    } catch (Throwable t) {
        System.out.println("Throwable");
    } finally { // 处理善后工作
        System.out.println("finally");
    }
}

}


```java
package com.crazygod.exception;

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

        try {
            new Demo02().test(a, b);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }

    }

    // 假设在方法中只抛出但是没有处理异常,则要在方法头部抛出异常,谁调用谁处理
    public void test(int a, int b) throws ArithmeticException{
        if (b == 0) {
            throw new ArithmeticException(); // 主动抛出异常,一般在方法中使用
        }
    }
}

自定义异常

package com.crazygod.exception;

// 自定义异常类
public class MyException extends Exception{
    private int detail;

    public MyException(int detail) {
        this.detail = detail; // 异常时打印的信息
    }

    // toString:异常的打印信息
    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}
package com.crazygod.exception;

public class Test {
    // 可能会出现异常的方法
    static void test(int a) throws MyException {
        if (a > 10) {
            throw new MyException(a);
        }
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyException e) {
            System.out.println(e);
        }
    }
}
posted @ 2020-08-25 19:51  CrazyGod  阅读(97)  评论(0)    收藏  举报