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. Grails:哪些类应该是域类?
- 3. 应该在哪里捕获异常?
- 4. UITapGestureRecognizer不捕获水龙头......“捕获”代码应该去哪里?
- 5. 这些类/方法应该去哪里?
- 6. 我应该用NHibernate映射哪些类?
- 7. 如何确定哪些应该是父表以及哪些应该是定义父子关系时的子表
- 8. 创造良好的接口,应该包括哪些内容,哪些应该被排除在外
- 9. 异常被捕获时,它不应该
- 10. 应该使用哪个SQL子句?
- 11. 我应该使用哪个SQL子句?
- 12. 哪些C#方法名称不应该被混淆?
- 13. 哪个Point2D应该使用
- 14. 应该使用哪个sn.exe?
- 15. 我应该处理哪些错误?哪些是“致命的”?
- 16. 我应该从哪个类调用locationManger.removeUpdates()?
- 17. 我应该使用哪个PHP Session类?
- 18. GetAll方法应该在哪个类中?
- 19. 我应该使用哪个视图类?
- 20. 该HTML帖子应该出现的响应在哪里?
- 21. 如何定义哪些方面应该编入我的项目,哪些不应该在AspectJ中?
- 22. 哪些文件应该包含这些类的文件?
- 23. 哪些团体应该参与敏捷?
- 24. ByteBuffers应该包含哪些状态?
- 25. 我应该使用哪些Microsoft Azure?
- 26. GeoDjango - 哪些表应该从django.contrib.gis.db.models继承?
- 27. TypeScript - 我应该检查哪些文件?
- 28. 我应该发布哪些API?
- 29. 我应该使用哪些elasticsearch聚合?
- 30. 我应该索引哪些列?
喜欢关于第三方代码的想法。谢谢 – 2010-01-27 10:44:07