gpt4 book ai didi

java - Java 中的异常。为什么我们有多个可检查和一个不可检查的类?

转载 作者:行者123 更新时间:2023-11-30 08:01:14 24 4
gpt4 key购买 nike

我是 Java 编程的新手。我刚开始学习异常,我在 API 文档中发现 Exception 类的所有子类都有两个构造函数——一个默认构造函数,另一个带有 String 参数。

所有这些类之间的区别在于其中一些类是可检查的,而另一些是不可检查的。 uncheckable 没有必要使用,checkable 必须使用。我对吗?如果是这样,为什么我们有多个可检查类和一个不可检查类?

例如,如果我们使用EOFException 类和FileNotFoundException 类,它们之间除了名称之外还有什么区别?两者都有相同的构造函数,并且都是可检查的。我知道可能有 EOF 情况的方法会抛出 EOFException 因为在这种情况下这个名称是合乎逻辑且可以理解的。但是,如果我们有机会使用 FileNotFoundException 而不是 EOFException 呢?所有的区别都是一个名字。

如果我想创建自己的异常,如果我扩展 EOFException 类而不是 FileNotFoundException 有什么区别,在这种情况下更符合逻辑的是扩展 FileNotFoundException?这是否没有区别,只是一种很好的编程风格来使用那个名称在当前情况下更合乎逻辑的异常类,如果两者都是可检查的?

最佳答案

您会使用不同的名称,因为假设您有一个 FileReader。如果它抛出 FileNotFoundException,您就知道找不到该文件。但这不同于 IOException(即使 FNFE 扩展了 IOException),因为有多种情况会抛出 IOException

存在不同的异常是因为您希望能够以不同的方式处理不同的问题。回到上面的例子,如果你有一个 FileNotFoundException,你可以做一些事情,比如写一个默认文件或告诉用户没有文件。但如果您有不同的异常,您可以通知用户发生的任何错误。

不需要检查的异常种类是运行时异常(它们都扩展RuntimeException)。这些异常之所以存在,是因为大多数时候它们不会发生,而且如果它们很少发生,那么捕获它们会很烦人。

但是,如果您正在逐行读取一个 String[] 中的文件,您不确定它是否确实有第 7 行或其他内容,那么您可以使用您的 ArrayIndexOutOfBoundsException 来处理这个问题。同样,NullPointerException 处理一个完全不同的问题。我们不能以相同的方式解决所有这些问题,因此使用不同的异常来告诉计算机在某个问题发生时执行 XYZ 而不是 YZX。

关于java - Java 中的异常。为什么我们有多个可检查和一个不可检查的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com