据我所知,如果你只声明一个检查的异常,它将通过你的所有方法传播到主方法,并仍然中断你的正常程序流程和你的程序仍然会停止工作。那么,为什么不总是用try/catch来处理检查的异常......这样,你的程序不会因为异常而停止?为什么要在方法的签名中声明异常?对不起,我的英文不好声明一个异常而不是处理它的意义是什么
回答
据我了解,如果你只是声明了一个检查异常,将通过所有方法向下传播的主要方法,仍然中断正常的程序流程和程序仍然会停止工作。
绝对。这是一个好事情如果发生了什么事真的无法处理。
例如,假设您已经有一个程序正在用文件中的某些数据更新您的数据库 - 但您无法加载该文件。
您可能刚刚捕获异常,忽略它,仍然在你的数据库覆盖数据......但将不是一件好事。一旦你处于一种你没有做好准备的情况,或者你基本上不能明智地继续下去,那么停止是做负责任的事情。
当然,如果你能真正处理异常并继续前进,这是伟大的 - 但我的经验,也有相对几个错误,其中是这样的话。如果你正在编写一个服务器端应用程序,你通常要中止请求(并给客户端一个错误)。如果你正在编写一个用户界面,那么你可能只想放弃当前的操作,通知用户并让他们继续......这是一个稍微不同的情况。
但是无条件地捕捉所有异常并假装它们没有发生? <不寒而栗>
例如,如果调用方法能够更好地处理异常。
假设你有一些读取文件的方法。如果文件不存在,该方法如何知道需要发生什么?也许整个程序应该终止,也许我们应该弹出通知用户,也许它应该记录异常并继续,也许它应该尝试从备份恢复文件。只有调用方法知道,所以它应该实现异常处理。
它适用于更复杂的系统。谁在链上使用你的代码可能想知道哪里出了问题,所以你让他们处理这个异常。它不一定完全一致(并且不可能真的,除非堆栈中的每一个方法抛出异常,这将打败整个目的。)
例外的一点是,您可以选择at其中级别可以捕获它们;您不必立即执行此操作 - 有时候这是正确的做法,但是单个顶级catch子句可以通过记录它们来处理所有其他异常,然后跳到下一个任务/请求(例如在一个servlet容器中)。
Java的检查异常试图通过强制您处理或声明异常来使此机制更加明确。这可以防止您忘记即将处理的异常。然而,许多人认为这是一个语言设计失败的实验(注意,没有其他语言采用检查异常),因为它迫使你在所有级别上都有一些与异常相关的代码 - 正是为了避免异常而设计的。
- 1. 什么是处理异常
- 2. Java错误 - 不是一个声明,这是什么意思?
- 3. MIPS异常它们是什么意思
- 4. 什么是“异步异常处理”
- 5. 'NM_OPER_ON_VIEW:PChar ='OnView'`作为常量声明的意义是什么?
- 6. 声明不需要处理的异常?
- 7. 捕捉异常的处理是什么?
- 8. 这个CSS声明是什么意思?
- 9. 这个C#声明是什么意思?
- 10. 会不会处理异常是一个更好的主意
- 11. 这是什么CSS声明的意思是 - 两个声明一次
- 12. 什么是'不是声明'?
- 13. 这个声明的含义是什么?
- 14. 这个声明是什么//! [数字]是什么意思?
- 15. 为什么异常是一个类,而不是结构?
- 16. 异常处理使用浏览器而不是异常助理
- 17. 为什么这被认为是一个未处理的异常?
- 18. 异常处理的一些最常见用途是什么?
- 19. 这个异常是什么意思
- 20. 这个异常是什么意思?
- 21. Netty异常处理 - Handler抛出异常,那么是什么?
- 22. 传递一个常量文字数组而不声明它是一个变量
- 23. 处理,运行如果声明两次而不是一次
- 24. 这些声明有什么区别?它与一个是可变的而另一个是不可变的?
- 25. 变量声明后面的一个问号是什么意思?
- 26. 以下声明是什么意思?
- 27. C声明是什么意思?
- 28. 以下声明是什么意思?
- 29. 为什么使用'extern'声明而不是定义创建一个变量?
- 30. “何时声明和处理异常”。
可能重复的[何时选择检查和未检查的异常](http://stackoverflow.com/questions/27578/when-to-choose-checked-and-unchecked-exceptions) – Bohemian 2012-03-24 15:04:55
@dido:除了什么Jon Skeet回答说(你可以真正处理的例外情况相对较少),你必须问自己这个问题:“程序员如何能够用无数语言工作,甚至没有检查异常的概念? “*。 Checked异常对于Java来说非常特殊,并且每天都有大量的程序员在使用,而这些语言没有检查异常的概念。您的客户的问题域中存在检查异常。 300 KLOC代码库,在这里我们不会抛出一次检查异常。 – TacticalCoder 2012-03-24 15:10:27
可能重复[对检查异常的情况](http://stackoverflow.com/questions/613954/the-case-against-checked-exceptions) – emory 2012-03-24 15:53:42