我是一名计算机科学专业的学生,所以我不知道那么多.
我最近和一位刚接受(java)软件开发人员工作的朋友谈话.他告诉我,在他的工作中,有一个人在C++方面很有经验,但不幸的是,每当他用java编写代码时,他都会使用try-catch来控制程序的流程.据我的朋友说,这是一种错误的Java风格.这是真的?在C++和Java之间使用try-catch(最终在java中)有什么不同(如果有的话)?
Joh*_*don 28
使用try-catch控制程序的流程在任何地方都是错误的...异常处理就是它所说的:处理异常情况.
当然,对于每个规则,都有十几个必要偏差的反例,但一般来说:不要用例外来控制程序流程.
当您预期在正常操作环境中抛出某些异常时,会使用异常来控制程序流,并根据这些异常做出逻辑决策.
例如,以伪代码控制程序流程:
try {
write update to file
} catch (IOException) {
write update to alternate file
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在盲目执行写入之前实际测试路径存在会更好.
我删除了权限检查说明,因为这是一个不好的例子
异常处理的一个很好的用法:(再次伪代码)
try {
do stuff
} catch(OutOfMemoryException) {
fail gracefully (don't try and do something else to achieve the same result)
}
Run Code Online (Sandbox Code Playgroud)
我想说从程序架构的角度来看,Java和C++中异常的目的是相同的.它们应该用于处理特殊情况,而不是直接正常的程序流程.
反对使用例外的最常见的论点是它们很慢.像大多数基于代码速度的参数一样,现在几乎总是无关紧要,特别是在正确使用异常的情况下.
我认为他所说的是他正在使用例外的非常规条件,如正常的循环终止.对于大多数提供异常(包括C++)的语言的程序员来说,这被认为是禁忌.
这样做的原因是异常往往会拖累相当多的信息.在某些平台上,它们将整个callstack带到异常点,以便在一个很好的调试消息中显示它.这是非常昂贵的,如果你真正想要的是无条件控制跳跃.
相反,你应该使用像break,return甚至甚至(在真正的捏)中的陈述goto.
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |