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

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

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

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

非受检异常

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

在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();
    }

总结

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

相关推荐
百万蹄蹄向前冲2 小时前
Trae Genimi3跟着官网学实时通信 Socket.io框架
前端·后端·websocket
狂炫冰美式3 小时前
TRAE SOLO 驱动:重构AI模拟面试产品的复盘
前端·后端·面试
x***38165 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
韩立学长6 小时前
基于Springboot课堂教学辅助系统08922bq1(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
盖世英雄酱581366 小时前
java深度调试技术【第六七八章:宽字节与多字节】
java·后端
望道同学8 小时前
PMP/信息系统项目管理师 9 张 思维导图【考试必备】
前端·后端·程序员
码事漫谈8 小时前
C++11到C++23语法糖万字详解
后端
码事漫谈8 小时前
别人的C#看着难受?可能是你不清楚这些语法糖
后端
+VX:Fegn08958 小时前
计算机毕业设计|基于springboot+vue的学校课程管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计