我知道谷歌搜索我可以找到合适的答案,但我更喜欢听听您的个人(也许是技术)意见。
Java 和 C# 在抛出异常方面存在差异的主要原因是什么?
在 Java 中,抛出异常的方法的签名必须使用“throws”关键字,而在 C# 中,您不知道在编译时是否可以抛出异常。
文章中检查异常的麻烦根据 Anders Hejlsberg(C# 语言的设计者)自己的说法,C# 不支持在 Java 中发现和验证检查异常的三个主要原因:
-
对检查异常持中立态度
“C# 基本上对检查保持沉默
例外问题。曾经更好
解决方案是已知的——相信我,我们
继续想一想——我们可以走了
回来并实际放入一些东西
地方。”
-
带有受检异常的版本控制
“向抛出添加新的异常
新版本中的子句破坏了客户端
代码。这就像向一个对象添加一个方法
界面。在您发布
界面,适合大家实用
目的一成不变,……”
“有趣的是,人们认为
关于异常的重要一点是
处理它们。那不是
关于例外的重要事情。在一个
写得好的应用程序有一个
我认为十比一的比例
最后尝试尝试捕获。或者在 C# 中,using语句,它们是
就像最后尝试一样。”
-
检查异常的可扩展性
“在小的、已检查的异常中
非常诱人……麻烦
当你开始建造大型建筑时就开始了
您正在与四个人交谈的系统
或五个不同的子系统。每个
子系统抛出四到十
例外情况。现在,每次你走上前去
聚合的阶梯,你有
你下面这个指数级的等级制度
您必须处理的异常情况。
你最终必须申报 40
您可能会抛出的异常。...
它只是膨胀失控。”
在他的文章中,“为什么 C# 没有异常规范?”, 安森霍顿(Visual C# 程序管理器)还列出了以下原因(有关每点的详细信息,请参阅文章):
- 版本控制
- 生产力和代码质量
- 让课程作者区分以下内容是不切实际的checked and 未经检查的例外情况
- 难以确定接口的正确异常。
有趣的是,尽管如此,C# 确实支持通过给定方法抛出异常的文档<exception>标签和编译器甚至不厌其烦地验证引用的异常类型确实存在。但是,不会在调用站点或方法的使用上进行检查。
您可能还想查看异常猎人,这是一个商业工具红门软件,它使用静态分析来确定和报告方法引发的异常,这些异常可能会未被捕获:
Exception Hunter 是一种新的分析
查找并报告一组的工具
您的功能可能存在的异常
可能会在发货之前抛出。
有了它,您可以找到未处理的
轻松快速地排除异常,直至
抛出的代码行
例外情况。当你得到结果后,
您可以决定需要哪些例外
待处理(有一些例外
处理代码)在你发布之前
应用到野外。
最后,布鲁斯·埃克尔,作者用Java思考,有一篇文章叫做“Java 需要检查异常吗?”,这可能也值得一读,因为为什么 C# 中不存在检查异常的问题通常是在与 Java 的比较中扎根的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)