API医生说永远赶不上Throwable的子类错误其中表示异常行为。这是否意味着Error和Exception之间的隔离是告诉程序员哪些子类应该被捕获,哪些不应该?或者还有更多呢?Throwable的哪个子类应该被捕获,哪些不应该?
4
A
回答
5
一般来说,Error
是严重错误的东西(通常在平台本身内的),这是你无法想象的。我曾经关心过的唯一一次关注Error
是为了登录它,然后我再抛出。
这是非常重要的,因为它(例如,使用executorService.submit(Runnable)
不听返回Future
)
Error
容易让错误(和运行时异常),以这样的方式,他们从未登录沿着调用堆栈s为平常之类的东西:
- 了内存
- 抽象方法错误(例如,运行针对不同版本的库中的那些内置反对)
- 断言(即程序员定义不变,或事情不应该发生的 - 笑)
我会那么说,RuntimeException
s为一般(但不总是)表示编程错误:
- !不检查为空或传入空
- 传递无效参数或允许无效状态
- 在您迭代迭代时修改集合
我通常会建议在这些上快速失败,但这是一个灰色区域;也许你在将它传递给服务器之前不检查用户输入 - 很难让你的应用崩溃!
选中Exception
s(即非运行时)应该用于您可以合理地期望在代码中合理(或可想象)发生的事情。就我个人而言,我喜欢检查异常,但由于涉及以相同方式处理不同异常类型(即在多个相同的catch块中)中涉及的冗长/重复,所以这些异常变得繁琐。语言如斯卡拉有更好的捕捉语法,但随后他们删除了的概念,检查了例外情况!
3
是的,我觉得你的分析是正确的在这里 - 你不应该赶上Error
因为他们代表的是不能从恢复运行时错误,如OutOfMemoryError
。
捕获Throwable
的唯一理由是如果您正在运行外部第三方代码,而这些代码对于您的程序的正确操作不是必需的 - 如果您不相信代码,就抓住所有东西,没想到(Throwable
)然后禁用该代码并报告它。
此外,区分Exception
和RuntimeException
也许是个好主意。
相关问题
- 1. 我应该捕捉哪些异常?
- 2. 应该在哪里捕获异常?
- 3. 我应该用NHibernate映射哪些类?
- 4. 如何确定哪些应该是父表以及哪些应该是定义父子关系时的子表
- 5. 异常被捕获时,它不应该
- 6. 哪些C#方法名称不应该被混淆?
- 7. 我应该使用哪个PHP Session类?
- 8. 我应该使用哪个视图类?
- 9. 我应该处理哪些错误?哪些是“致命的”?
- 10. 如何定义哪些方面应该编入我的项目,哪些不应该在AspectJ中?
- 11. 我应该处理哪些异常?
- 12. 哪些团体应该参与敏捷?
- 13. CanExecute中应该包含哪些内容?
- 14. 我应该发布哪些API?
- 15. 我应该继承哪些WPF控件?
- 16. 哪些方法应该是const?
- 17. 哪些案件应该在Zend框架
- 18. 我应该使用哪些OOP选项?
- 19. 我应该使用哪些elasticsearch聚合?
- 20. 我应该测试哪些Android设备?
- 21. 哪些文件应该只读为TFS?
- 22. Slack webhook - 我应该打开哪些IP?
- 23. 哪些实体应该是聚合根?
- 24. 我应该使用哪些php函数?
- 25. Tokensregexner应该使用哪些设置
- 26. 我应该索引哪些列?
- 27. TypeScript - 我应该检查哪些文件?
- 28. 我应该启动哪些C++项目?
- 29. 应该制作哪些演员持久?
- 30. 应该执行哪些行为?
喜欢关于第三方代码的想法。谢谢 – 2010-01-27 10:44:07