据我所知,如果你只声明一个已检查的异常,它将通过你的所有方法传播到主方法,仍然会中断你的正常程序流,你的程序仍然会停止工作。那么,为什么不总是用try/catch处理已检查的异常呢。。。这样你的程序就不会因为异常而停止?为什么要在方法的签名中声明异常?抱歉我的英语不好
据我所知,如果你只声明一个已检查的异常,它将通过你的所有方法传播到主方法,仍然会中断你的正常程序流,你的程序仍然会停止工作。
当然。如果发生了你真的无法处理的事情,这是一件好事。
例如,假设您有一个程序要用文件中的一些数据更新数据库,但您未能加载该文件。
您可以只捕获异常,忽略它,然后仍然覆盖数据库中的数据。。。但这不是一件好事。一旦你处于一种没有做好准备的情况,或者你根本无法理智地继续下去,那么停止就是负责任的事情。
当然,如果你能真正地处理异常并继续进行,那就太好了——但根据我的经验,相对来说很少有错误。如果您正在编写服务器端应用程序,通常需要中止请求(并向客户端发出错误)。如果你正在编写UI,那么你可能只想放弃当前操作,通知用户并让他们继续。。。那里的情况略有不同。
但无条件地抓住所有例外并假装它们没有发生<颤抖>
异常的意义在于,您可以选择在哪个级别捕获它们;您不必立即执行此操作——有时这是正确的做法,但一个顶级catch子句可以通过记录所有其他异常,然后跳到下一个任务/请求(例如,在servlet容器中)来处理所有其他异常。
Java的检查异常试图通过强制您处理或声明异常来使此机制更加明确。这可以防止您忘记想要立即处理的异常。
然而,许多人认为这是语言设计中的一个失败的实验(请注意,没有其他语言采用检查异常),因为它迫使你在所有级别上都有一些与异常相关的代码——这正是设计异常时要避免的。
例如,如果调用方法能够更好地处理异常。
假设你有一些读取文件的方法。如果文件不存在,该方法如何知道需要发生什么?也许整个程序应该终止,也许我们应该用弹出窗口通知用户,也许它应该记录异常并继续,也许它可以尝试从备份中恢复文件。只有调用方法知道,所以它应该实现异常处理。
它适用于更复杂的系统。无论谁在链的更高层使用你的代码,都可能想知道出了什么问题,所以你让他们处理这个异常。它不一定会一直到main(也不可能,除非堆栈中的每个方法都抛出异常,否则会破坏整个目的。