Java 中已检查与未检查的异常

简介: Java 中已检查与未检查的异常

在 Java 中,有两种类型的异常:


1)Checked: 是在编译时检查的异常。如果某个方法中的某些代码抛出了已检查的异常,则该方法必须要么处理该异常,要么必须使用 throws 关键字指定该异常。


例如,考虑以下 Java 程序,它打开位置“C:\test\a.txt”的文件并打印它的前三行。程序无法编译,因为main()函数使用 FileReader() 并且 FileReader() 抛出一个检查异常 FileNotFoundException。它还使用了 readLine() 和 close() 方法,这些方法也会抛出检查异常 IOException

import java.io.*;
class Main {
  public static void main(String[] args) {
    FileReader file = new FileReader("C:\\test\\a.txt");
    BufferedReader fileInput = new BufferedReader(file);
    // 打印文件“C:\test\a.txt”的前三行
    for (int counter = 0; counter < 3; counter++)
      System.out.println(fileInput.readLine());
    fileInput.close();
  }
}

输出:

错误:(10, 50) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
错误:(5, 27) java: 未报告的异常错误java.io.FileNotFoundException; 必须对其进行捕获或声明以便抛出
错误:(12, 24) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出

为了修复上面的程序,我们要么需要使用 throws 指定异常列表,要么需要使用 try-catch 块。我们在下面的程序中使用了 throws。由于 FileNotFoundExceptionIOException 的子类,我们可以在 throws 列表中指定 IOException 并使上述程序无编译错误。

import java.io.*;
class Main {
  public static void main(String[] args) throws IOException {
    FileReader file = new FileReader("C:\\test\\a.txt");
    BufferedReader fileInput = new BufferedReader(file);
    // 打印文件“C:\test\a.txt”的前三行
    for (int counter = 0; counter < 3; counter++)
      System.out.println(fileInput.readLine());
    fileInput.close();
  }
}

输出:文件“C:\test\a.txt”的前三行如下

image.png

2) Unchecked: 是在编译时未检查的异常。在 C++ 中,所有异常都是未经检查的,因此编译器不会强制它处理或指定异常。程序员应该文明,并指定或捕获异常。\


ErrorRuntimeException 类下的 Java 异常是未经检查的异常,在 throwable 下的所有其他异常都被检查。

                   +-----------+
           | Throwable |
                   +-----------+
                    /         \
           /           \
          +-------+          +-----------+
          | Error |          | Exception |
          +-------+          +-----------+
       /  |  \           / |        \
         ________/      ______/         \
                            +------------------+
    unchecked     checked    | RuntimeException |
                    +------------------+
                      /   |    |      \
                     _________________/
                       unchecked

考虑以下 Java 程序。它编译得很好,但在运行时会抛出 ArithmeticException 。编译器允许它编译,因为 ArithmeticException 是一个未经检查的异常。

class Main {
    public static void main(String args[]) {
            int x = 0;
            int y = 10;
            int z = y/x;
    }
}

输出:

image.png

我们应该检查异常还是不检查异常?


以下是Java 文档的描述

底线准则:

如果可以合理地期望客户端从异常中恢复,请将其设为已检查异常。如果客户端无法从异常中恢复,则将其设为未经检查的异常


以上就是本篇文章的全部内容

💌 欢迎大家在评论区提出意见和建议!💌

如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦。


目录
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
73 1
|
2月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
83 12
|
2月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
44 1
|
2月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
78 7
|
2月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
91 6
|
2月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
68 1
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
84 2
|
2月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
117 5
|
2月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
53 5
|
2月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
114 5