【异常】Java抛出和捕获异常以及自定义异常的步骤

文章目录

    • @[toc]
  • 1️⃣ 一、什么是异常
    • 1、简介
    • 2、举例
    • 3、常见异常
    • 4、Error和Exception的区别
  • 2️⃣ 二、捕获和抛出异常
    • 1、捕获异常
    • 2、抛出异常
  • 3️⃣ 三、自定义异常
    • 1、大体步骤
    • 2、举例
  • 4️⃣ 四、经验总结
        • **说在最后*:*

1️⃣ 一、什么是异常

1、简介

异常是指程序中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。

异常发生在程序运行期间,它影响了正常的程序执行流程。

2、举例

类别 说明
检查型异常 程序员无法预见,如:用户错误或问题引起的异常、打开一个不存在的文件,不能在女编译时忽略
运行时异常 程序员可以避免,可以在编译时忽略
错误 错误不是异常是脱离程序员控制的问题,编译时检查不到,如:栈溢出错误

3、常见异常

举例 说明
RuntimeException 运行时异常
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 空指针异常
ArithmeticException 算术异常
MissingResourceException 丢失资源
ClassNotFoundException 找不到类

4、Error和Exception的区别

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

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


2️⃣ 二、捕获和抛出异常

1、捕获异常

快捷键:ctrl + alt + T

public class Main {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        int[] c = {1, 2, 3, 4};
        try {//try监控区域
            // System.out.println(a/b);
            System.out.println(c[4]);
        } catch (ArithmeticException e) {//想要捕获的异常类型(从小到大)
            System.out.println("算术异常");
        } catch (ArrayIndexOutOfBoundsException e) {//想要捕获的异常类型(从小到大)
            System.out.println("数组下标越界");
        } catch (RuntimeException e) {//想要捕获的异常类型(从小到大)
            System.out.println("运行时异常");
        } finally {
            System.out.println("程序错误,请修改!");//处理善后工作,如:关闭IO资源
        }
    }
}

2、抛出异常

public class Main {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {
            System.out.println(new Main().f(a,b));
        } catch (ArithmeticException e) {//方法上主动抛出后,这里会自动识别
            throw new RuntimeException(e);
        }
    }
    //假设这个方法处理不了这个异常,就要在方法上抛出异常
    public int f(int a, int b) throws ArithmeticException{
        if (b == 0) {
            throw new ArithmeticException();//主动抛出异常,一般用在方法中
        }else{
            return a / b;
        }
    }
}

3️⃣ 三、自定义异常

1、大体步骤

用户自定义异常类,需要继承Exception类,使用 extends Exception

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

2、举例

//继承 Exception 类-----自定义的异常类
public class MyException extends Exception {
    //传递数字  大于10
    private int detail;

    public MyException(int a) {
        this.detail = a;
    }

    //异常打印信息
    @Override
    public String toString() {
        return "MyException{" +
                detail +
                '}';
    }
}

class Test {
    //可能会存在异常的方法
    static void test(int a) throws MyException {
        System.out.println("传递的参数为:" + a);
        if (a > 10) {
            throw new MyException(a);//抛出
        }
        System.out.println("OK");
    }

    public static void main(String[] args) {
        try {                       //捕获
            test(11);
        } catch (MyException e) {
            System.out.println("MyException => " + e);
        }
    }
}

4️⃣ 四、经验总结

  • 处理运行时异常时,采用逻辑去合理规避同时辅助 try - catch 处理
  • 在多重 catch 块后面,可以加一个 较大范围的 catch (Exception) 来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加上 try - catch ,处理潜在的异常
  • 尽量去处理异常,切忌只是简单地调用 printStackTrace() 去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加 finally 语句块去释放占用的资源(如:IO操作)

说在最后

​ ✍创作不易,如果觉得文章写得还可以的话,就不要吝啬你的 啦~ ✍


你可能感兴趣的:(java,jvm,开发语言)