• Java 中已检查和未检查异常


    1. 概述

    Java 异常分为两大类:已检查的异常和未检查的异常。

    在本教程中,我们将提供一些有关如何使用它们的代码示例。

    2. 已检查的异常

    通常,已检查的异常表示程序无法控制的错误。例如,如果输入文件不存在,则文件输入流的构造函数将引发文件不被发现异常。

    Java 在编译时验证已检查的异常。

    因此,我们应该使用 throws 关键字来声明一个选中的异常:

    1. private static void checkedExceptionWithThrows() throws FileNotFoundException {
    2. File file = new File("not_existing_file.txt");
    3. FileInputStream stream = new FileInputStream(file);
    4. }

    我们还可以使用 try-catch 块来处理已检查的异常:

    1. private static void checkedExceptionWithTryCatch() {
    2. File file = new File("not_existing_file.txt");
    3. try {
    4. FileInputStream stream = new FileInputStream(file);
    5. } catch (FileNotFoundException e) {
    6. e.printStackTrace();
    7. }
    8. }

    Java 中一些常见的已检查异常包括 IO 异常SQL 异常和解析异常

    Exception 类是已检查异常的超类,因此我们可以通过扩展 Exception 来创建自定义的已检查异常

    1. public class IncorrectFileNameException extends Exception {
    2. public IncorrectFileNameException(String errorMessage) {
    3. super(errorMessage);
    4. }
    5. }

    3. 未检查的异常

    如果程序引发未经检查的异常,则会反映程序逻辑中的某些错误。

    例如,如果我们将一个数字除以0,Java将抛出算术异常

    1. private static void divideByZero() {
    2. int numerator = 1;
    3. int denominator = 0;
    4. int result = numerator / denominator;
    5. }

    Java 不会在编译时验证未检查的异常。此外,我们不必在具有 throws 关键字的方法中声明未检查的异常。尽管上述代码在编译期间没有任何错误,但它会在运行时引发算术异常

    Java 中一些常见的未经检查的异常“空点例外”、“数组索引”“排除边界异常”和“非法附件异常”

    是所有未选中异常的超类,因此我们可以通过扩展运行时异常创建自定义未选中的异常

    1. public class NullOrEmptyException extends RuntimeException {
    2. public NullOrEmptyException(String errorMessage) {
    3. super(errorMessage);
    4. }
    5. }

    4. 何时使用已检查的异常和未检查的异常

    在Java中使用异常是一种很好的做法,这样我们就可以把错误处理代码与常规代码分开。但是,我们需要决定要引发哪种类型的异常。Oracle Java 文档提供了有关何时使用已检查异常和未选中异常的指南:

    “如果可以合理地期望客户端从异常中恢复,请将其设置为经过检查的异常。如果客户端无法执行任何操作来从异常中恢复,请将其设置为未选中的异常。

    例如,在打开文件之前,我们可以先验证输入文件名。如果用户输入的文件名无效,我们可以抛出一个自定义的选中异常:

    1. if (!isCorrectFileName(fileName)) {
    2. throw new IncorrectFileNameException("Incorrect filename : " + fileName );
    3. }

    通过这种方式,我们可以通过接受另一个用户输入的文件名来恢复系统。

    但是,如果输入文件名是空指针或空字符串,则表示代码中存在一些错误。在这种情况下,我们应该抛出一个未选中的异常:

    1. if (fileName == null || fileName.isEmpty()) {
    2. throw new NullOrEmptyException("The filename is null or empty.");
    3. }

    5. 结论

    在本文中,我们讨论了已检查和未检查异常之间的区别。我们还提供了一些代码示例来显示何时使用选中或未选中的异常。

    与往常一样,本文中的所有代码都可以在GitHub上找到。

  • 相关阅读:
    我和EarthSDK Cesium那点事(零)
    ajax,axios,fetch
    c#笔记整理
    数据库概论(简单介绍)
    客快物流大数据项目(七十一):impala-shell命令参数
    uniapp中全局页面挂载组件(小程序)
    技术分享 | web 控件的交互进阶
    UVM中config_db机制的使用方法
    4.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-模拟游戏登陆器启动游戏并且完成注入
    指定元素懒加载
  • 原文地址:https://blog.csdn.net/allway2/article/details/127091793