Exception 如果我们可以用try-catch进行异常处理,为什么要使用抛出

Exception 如果我们可以用try-catch进行异常处理,为什么要使用抛出,exception,Exception,异常处理的主要目的是在运行时或编译时管理异常 我们有两种处理异常的方法: 通过在try块中插入怀疑异常的代码和在catch块中插入catch异常来引发异常 通过从方法的中写入抛出来声明异常 我的问题是为什么要使用第二种方法,声明异常? 声明异常有什么用,但我们的目标是处理异常? 检查的异常和未检查的异常之间有什么区别?您将声明,当您不想处理检查的异常时,您的方法可以抛出该异常。例如,FileReader构造函数被声明为抛出FileNotFoundException。如果没有,它将不得不自己处理它

异常处理的主要目的是在运行时或编译时管理异常

我们有两种处理异常的方法:

  • 通过在try块中插入怀疑异常的代码和在catch块中插入catch异常来引发异常
  • 通过从方法的中写入抛出来声明异常
  • 我的问题是为什么要使用第二种方法,声明异常?
    声明异常有什么用,但我们的目标是处理异常?

    检查的异常和未检查的异常之间有什么区别?

    您将声明,当您不想处理检查的异常时,您的方法可以抛出该异常。例如,
    FileReader
    构造函数被声明为抛出
    FileNotFoundException
    。如果没有,它将不得不自己处理它(例如,通过在标准错误上打印“Error:File not found”,您将无法捕获它

    这与您的第二个问题有关:检查异常和未检查异常之间的区别是什么
    FileNotFoundException
    是一个选中的异常,这意味着您需要决定处理它,或者声明您没有处理它(以便方法的调用方将面临相同的决定)。这确保了异常会在某个地方得到处理——如果没有,编译器会抱怨。不需要处理未检查的异常,例如
    OutOfMemoryError
    -Java假定您不应该耗尽内存;而且,从理论上讲,任何方法都可能耗尽内存,因此坚持认为必须将每个方法都声明为
    OutOfMemoryError
    的潜在来源,这将是荒谬的


    至于哪个是哪个:
    RuntimeException
    Error
    以及它们的所有子类都被取消选中<代码>异常及其子类(除了运行时异常)被检查。

    Oracle有一篇关于检查异常和未检查异常争议的有用文章

    他们的建议是:

    这里有一条底线指引:如果客户可以合理预期 从异常中恢复,使其成为选中的异常。如果客户不能这样做 要从异常中恢复的任何内容,请将其设置为未检查的异常

    根据具体情况,在特定方法中处理异常可能没有意义,堆栈中更高的部分可能能够执行正确的操作

    考虑FileNotFoundException,有时在方法中捕获异常并解决它(加载默认值)可能是有意义的,但也许更高层次的东西以及有关用户意图的更多信息能够做出正确的决定(提醒他们丢失文件)