2011-01-06 49 views
1

厌倦说服我的同龄人放弃在议论文的方式检查异常后,我在寻找任何统计数据会说多少程序员喜欢检查的异常,又有多少不喜欢使用它们。
网络上有这样的调查/投票/统计数据吗?检查VS未经检查的异常统计

+3

另一个有趣的统计是“有多少人了解差异”。我的非正式经历是“不多”。 – Uri 2011-01-06 18:40:10

+0

我想说第二个Uri的评论。你的同事可能害怕他们不理解的东西,并且通过代理人害怕你! :( – 2011-01-06 18:44:43

+1

在Java中放弃检查的异常与运行时库相反,为什么你想这么做? – 2011-01-06 19:16:02

回答

5

如何向他们指出Java教程:

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

,其中包括这显然总结了关键点最后一行:

这里的底线准则:如果 客户端可合理预期 从异常中恢复,使其成为 检查异常。如果客户端无法 做任何事情,从 异常中恢复,使它成为一个未经检查 例外。

+0

我认为poeple仍然可以争论那就是... – oshai 2011-01-06 19:04:36

+1

那么,就像它将要讨论这个话题一样,如果他们仍然在争论,那么这听起来像某人不合理。 – jzd 2011-01-06 19:57:39

+3

底线的论据。这是客户端决定是否它毕竟可以从异常中恢复如果我有一个应用程序,如果没有找到配置文件,那么它将无能为力,FileNotFoundException是一个非常重要的(未检查,不可恢复的)运行时异常。如果没有找到它,那么它没有被选中,它很大程度上取决于客户端,更不用说那些抛出它的API。当然,Imho。 – fwielstra 2011-01-06 20:02:21

0

如果有这样的调查将不是你的牛orkers只是认为有更坏的程序员比在网络上优秀的程序员,他们会希望有更多的坏程序员投票支持unchecked异常?所以它并不能真正解决你的问题。

两个数据点被说服我:

  • 没有其他语言的实施者据我所知的任何地方复制了从Java检查的异常。就其他语言而言,这是完全失败的。

  • 已经有框架作家中的广泛运动,从春到Hibernate为Java EE,与未检查更换许多检查的异常。

除此之外,你可以尝试审核您的项目的代码,并找到如何检查的异常导致问题越来越例外吃或无用的例子‘抛出异常’的条款随处可见。

0

许多语言和框架从C++中派生出它们的一般异常处理概念的一个问题就是太多事情在异常类型中被有效编码。 checked异常将是一个很好的概念,如果检查到的抗选中的区别在throw-和catch网站进行了改造,而不是例外的声明,如果有一种方法来简明地指定特定的检查异常应该重新调整为未经检查。不幸的是,Java要求给定类型的任何异常总是被检查或总是被取消检查,这取决于类型,并且没有提供方便或简明的方式来将检查的异常映射到未检查的异常。相反,它将检查异常过滤为检查异常变得非常方便,这会增加“滋扰”因素,同时降低其有用性。

如果在抛出站点执行了检查异常,并且如果处理不需要检查的异常的正常方式是将它们转换为未检查,那么可以确保通过抛出特定检查来指示特定故障状态的方法当它“想要”报告那个特定的错误时,异常只会抛出该检查的异常;如果在方法执行过程中发生相同类型的异常(意外),它将转换为未经检查的异常。这样的“检查异常”模型可能是有用的,并且还可以导致比正常异常更高效的代码(因为检查的异常必须在例程的直接调用者中处理,引发它们,需要大部分堆栈解除和堆栈跟踪对于正常的异常处理可以跳过)。不幸的是,Java的“检查异常”并不是那种方式。