如何处理未经检查的异常?

Dim*_* C. 5 c# java exception-handling exception

Java有编译器检查异常.当我转换到C++时,我了解到它没有检查异常.起初,我一直在使用异常处理,因为它是一个很棒的功能.但是,过了一段时间我放弃了它,因为我遇到了一种情况,每个函数都可能抛出异常.由于我编写的函数中只有一小部分可以抛出异常(比如说最多只有25%),我发现对不能抛出任何不可接受的函数进行异常处理的开销.

因此,我很惊讶有很多开发人员更喜欢未经检查的异常.因此,我很想知道他们是如何处理这个问题的.如果语言不支持检查异常,您如何避免执行不必要的异常处理的开销

备注:我的问题同样适用于C++和C#,也可能适用于所有其他不具备编译器检查异常处理功能的语言.

小智 16

简单.你不会在"每个可能抛出的函数"中进行异常处理 - 在C++中,几乎每个函数都可以这样做.相反,您可以在应用程序中的某些关键点执行此操作,您可以在其中生成合理的,特定于应用程序的诊断并采取合理的,针对特定应用程序的纠正措施,尽管使用RAII习语意味着(正如avakar在其答案中指出的那样)通常很少采取纠正措施.

  • 同意.RAII完成99%的开发人员需要在Java中手动完成的工作.您只需要在剩余的1%的情况下添加异常处理.另请注意,80%的统计数据已经弥补,但你得到了我的漂移. (3认同)

Jon*_*eet 11

当我第一次开始使用C#时,我也很害怕.然后我发现实际上,这并不常见.我很少发现我可以捕获一个异常,所以对它有用的东西......几乎所有的异常都会冒泡到堆栈顶部附近的某个地方,在那里它们通过中止请求或其他任何东西来处理.

现在,当我编写Java时,我发现检查的异常在很多时候都非常令人沮丧.我认为那里有价值,但它引入了许多问题,因为它解决了.

基本上,我认为我们还没有真正完成错误处理方面的"正确",但总的来说,我更喜欢采用C#方法来实现Java方法.