分享两个概念:非受检异常和受检异常

分享两个概念:非受检异常和受检异常

愿你的每一天都充满阳光和笑声,愿每一步都是轻松与愉快。在新的旅程中,愿你找到勇气攀登高峰,找到智慧化解困境。

愿你的心中充满温暖和善意,愿你的梦想如彩虹般美丽且真实。愿你发现生活中的小确幸,懂得感恩每一个瞬间。

非受检异常

"非受检异常"通常指的是在编程中发生的一些异常情况,这些异常情况通常不会在代码中明确声明或捕获,因此被称为"非受检异常"或"运行时异常"。

在Java中,非受检异常通常是RuntimeException及其子类的实例。与受检异常(checked exception)不同,非受检异常不需要在方法签名中显式声明,也不需要使用try-catch块来捕获或处理。这使得开发者可以更灵活地处理异常情况,但也需要更加小心,因为这些异常往往反映了程序中的逻辑错误或运行时环境的问题。

以下是一些常见的非受检异常的例子:

  1. NullPointerException(空指针异常): 当试图在一个空对象上调用方法或访问属性时,会抛出NullPointerException。

    java 复制代码
    String str = null;
    int length = str.length();  // 这里会抛出NullPointerException
  2. ArrayIndexOutOfBoundsException(数组越界异常): 当尝试访问数组中不存在的索引时,会抛出ArrayIndexOutOfBoundsException。

    java 复制代码
    int[] array = {1, 2, 3};
    int value = array[5];  // 这里会抛出ArrayIndexOutOfBoundsException
  3. ArithmeticException(算术异常): 当进行不合法的算术运算时,会抛出ArithmeticException。

    java 复制代码
    int result = 10 / 0;  // 这里会抛出ArithmeticException

对于非受检异常,通常的建议是在程序中尽量避免引发这些异常,因为它们通常表示代码中存在问题。此外,如果确实发生了非受检异常,最好的处理方式是让程序崩溃并尽快修复代码,而不是试图捕获并继续执行可能处于不确定状态的程序。

受检异常

与非受检异常相对的概念是受检异常(Checked Exception)。受检异常是在Java中的异常体系中的一类异常,它们是Exception的直接子类,但不是RuntimeException的子类。与非受检异常不同,受检异常在代码中必须进行明确的声明或捕获,否则编译器会报错。

受检异常通常表示一些在程序中可能会发生的、需要程序员注意和处理的异常情况,例如文件不存在、网络连接失败等。这种异常的出现不一定是代码错误,但程序员需要通过try-catch块或者在方法签名中使用throws关键字明确地处理这些异常。

以下是一些受检异常的例子:

  1. IOException(输入输出异常): 表示在输入输出操作中可能发生的异常情况,比如文件读写时可能发生的错误。

    java 复制代码
    try {
        FileReader fileReader = new FileReader("example.txt");
        // 读取文件内容
    } catch (IOException e) {
        e.printStackTrace();
    }
  2. SQLException(SQL数据库访问异常): 表示在与数据库交互时可能发生的异常,比如执行SQL查询时出现问题。

    java 复制代码
    try {
        // 执行数据库查询
    } catch (SQLException e) {
        e.printStackTrace();
    }
  3. ClassNotFoundException(类未找到异常): 表示在运行时无法找到所需的类。

    java 复制代码
    try {
        Class<?> clazz = Class.forName("com.example.MyClass");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

总结

总的来说,与非受检异常相对的受检异常需要程序员在代码中显式处理,以确保程序能够在可能出现的异常情况下进行合理的处理,提高程序的稳定性和可靠性。

相关推荐
自珍JAVA3 小时前
访问者模式:让你的代码优雅地“拜访”对象结构
后端
毅航5 小时前
AI 浪潮下,会用工具不等于具备能力
后端·程序员·ai编程
比特森林探险记6 小时前
go 语言中的context 解读和用法
开发语言·后端·golang
刀法如飞6 小时前
《道德经》简单解说版-第 2 章:天下皆知美之为美
前端·后端·面试
IT_陈寒9 小时前
Vue的computed属性怎么突然不更新了?
前端·人工智能·后端
invicinble9 小时前
spring提供的其他机制
java·后端·spring
还是鼠鼠9 小时前
AI掘金头条新闻系统 (Toutiao News)-用户注册-创建用户
后端·python·mysql·fastapi·web
李广坤9 小时前
别再把 Filter、Interceptor 和 AOP 混为一谈了!从接口加解密谈 Spring 纵深架构设计
后端
我是一颗柠檬9 小时前
【MySQL全面教学】MySQL条件查询与排序Day4(2026年)
数据库·后端·mysql
她的男孩10 小时前
后台权限不只是菜单隐藏:Forge Admin 的 RBAC 权限链路拆解
java·后端·架构