java 异常处理

本文介绍了Java中的异常处理机制,包括Throwable和其子类Error与Exception的区别,受检异常(CheckedException)和非受检异常(UncheckedException)的分类,自定义异常的创建,以及如何使用throw、catch、finally块进行异常的抛出和处理。
摘要由CSDN通过智能技术生成

在 Java 中,异常(Exception)是指程序运行过程中可能遇到的错误或异常情况。

以下是java体系中异常的继承关系

在这里插入图片描述

Throwable是所有异常的超类,下分Error和Exception。

Error

Error表示严重的问题,通常由虚拟机自身出现。通常无法通过程序本身来恢复或处理,因为这些问题已经超出了程序本身的控制范围。一般情况下,不建议程序捕获和处理 Error,而是应该尽量预防这类问题的发生,或者在遇到时让程序自然地终止。常见的Error有

  1. OutOfMemoryError:内存溢出。
  2. StackOverflowError:栈溢出。
  3. NoClassDefFoundError:无法找到所需的类定义

Exception

Exception是程序正常运行中可以预料到的问题,通常由程序本身逻辑或外部条件引起。可以通过捕获和处理来使程序继续执行,或采取适当的措施进行恢复。根据异常的特性和使用场景,异常又可以分为两大类:

受检异常(Checked Exception)

这类异常在编译时就需要进行处理,即要求程序员在代码中显式地捕获或声明可能抛出的受检异常。像在进行流操作是要处理IOException,在数据库操作时需要处理SQLException,线程操作时需要处理InterruptedException。这些异常通常与外部资源交互有关,比如文件操作、网络操作、数据库操作等。

非受检异常(Unchecked Exception)

也称为运行时异常(Runtime Exception),这类异常在编译时不强制要求进行处理,可以选择性地捕获和处理。这些异常通常与程序逻辑有关,也是和开发者比较相关的。像经常遇到的一些异常:

1、NullPointerException 空指针

2、ArrayIndexOutOfBoundsException 数组下标越界

3、IllegalArgumentException 参数不合法

4、ArithmeticException 算数运算异常

根据异常分类,可以有针对性地进行异常处理,保障程序的稳定性和可靠性。在实际开发中,需要根据具体的业务逻辑和需求,合理处理各种类型的异常。

自定义异常

jdk中已经定义了很多常见的异常,但是在系统开发的时候一般还是会自定义一些与业务相关的异常,用来区分不同的业务场景,使错误更明确。特别是在进行接口开发时。

自定义异常一般需要继承Exception类。Exception有一个Exception(String message)构造函数可以指定错误异常。当然也可以自定义异常属性用来标识一些信息,最常见的是添加状态码值。

public class MyExcepton extends Exception {
    public MyExcepton(String message){
        super(message);
    }
}

异常的使用和处理

定义好异常后就可以在一些条件下来明确使用异常,抛出异常使用throw关键字

if(1 == 1)
    throw new MyExcepton("条件不满足");

使用throw抛出的异常,这里就是一种受检查异常,在被调用地方必须要进行代码显示的处理异常。

处理异常可以使用try-catch-finally块来。

catch块会捕获对应的异常,可以获取异常的相关信息

try {
    Thread.sleep(11);
} catch (InterruptedException e) {
    e.printStackTrace();
    e.getMessage();
    System.out.println(e.toString());
}

printStackTrace():打印异常的堆栈信息,也就是方法调用链

getMessage():异常的描述信息

toString():包括异常类名和异常描述信息

另外finally块是对异常的兜底操作,无论try块中是否发生异常,finally块中语句都会在整个try-catch-finally代码块部分最后被执行到。可以用于一些资源的释放等操作。

如果不想在当前代码块进行处理异常,可以将异常继续抛出到方法签名上,由调用该方法 的地方进行处理,方法异常抛出使用throws关键字,可以指定多个。

public void m1() throws InterruptedException, FileNotFoundException {
    Thread.sleep(1);
    File file = new File(("a.txt"));
    new FileInputStream(file);
}

参考:
https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

https://www.geeksforgeeks.org/exceptions-in-java/

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值