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

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操作)

说在最后📝

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


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我来简单讲一下自定义异常捕获,以及Java内置异常捕获与处理。 首先,Java中的异常分为两类:Checked Exception和Unchecked Exception。Checked Exception指的是编译器在编译期间会检查的异常,必须在代码中进行处理或者向上;Unchecked Exception则不需要在代码中进行处理或者向上,也就是说可以不处理。 1. 自定义异常捕获定义异常通常用于在代码中一些业务逻辑上的异常,比如参数不合法、用户不存在等等。自定义异常需要继承自Exception或者RuntimeException类,可以通过构造方法传入错误信息,示例代码如下: ```java public class MyException extends RuntimeException { public MyException(String message) { super(message); } } ``` 定义异常的方式可以使用throw关键字,示例代码如下: ```java public void doSomething(int num) { if (num < 0) { throw new MyException("num不能为负数"); } // do something } ``` 捕获定义异常的方式和Java内置异常一样,使用try-catch语句,示例代码如下: ```java try { doSomething(-1); } catch (MyException e) { System.out.println(e.getMessage()); } ``` 2. Java内置异常捕获与处理 Java提供了一些内置的异常类,比如NullPointerException、ArrayIndexOutOfBoundsException等等。这些异常通常是由于程序运行时现了问题,需要进行捕获和处理。 Java内置异常的处理方式和自定义异常类似,使用try-catch语句,示例代码如下: ```java try { String str = null; System.out.println(str.length()); } catch (NullPointerException e) { System.out.println("现了空指针异常"); } ``` 除了try-catch语句,Java还提供了finally语句块和try-with-resources语句来处理异常,这里不再赘述。 总结一下,自定义异常捕获需要继承自Exception或者RuntimeException类,使用throw关键字异常,使用try-catch语句捕获异常Java内置异常捕获和处理方式和自定义异常类似,使用try-catch语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值