Oop 什么是';例外';?
我想从单元测试或OOP原则的角度来定义“例外”。有几次,当我谈到异常抛出时,我看到一些评论,比如:“嗯,我不会考虑从酒吧得到FoO是例外。”(有没有表情表情?) 我在谷歌上搜索了一下,并没有马上得到答案。是否有比意见或偏好更客观的好定义、经验法则或指导方针?如果一个人说“这是例外”,另一个人说“不,不是”,那么如何解决这一争议Oop 什么是';例外';?,oop,exception,Oop,Exception,我想从单元测试或OOP原则的角度来定义“例外”。有几次,当我谈到异常抛出时,我看到一些评论,比如:“嗯,我不会考虑从酒吧得到FoO是例外。”(有没有表情表情?) 我在谷歌上搜索了一下,并没有马上得到答案。是否有比意见或偏好更客观的好定义、经验法则或指导方针?如果一个人说“这是例外”,另一个人说“不,不是”,那么如何解决这一争议 编辑:哇,所以已经有很多答案了,有不一致的评论,而且它们似乎都是回答者的意见:p没有人引用过维基百科页面或文章或灰胡子的片段。我从中得到的“元答案”是,对于何时使用异常
编辑:哇,所以已经有很多答案了,有不一致的评论,而且它们似乎都是回答者的意见:p没有人引用过维基百科页面或文章或灰胡子的片段。我从中得到的“元答案”是,对于何时使用异常,没有达成一致的经验法则。在选择抛出异常时,我更自信地使用自己的、个人的、特殊的规则。一般的经验法则是:
- 对您预计可能发生的错误使用异常
- 使用断言处理可能永远不会发生的错误
我不同意其他关于需要“例外”才能保证“例外”的答案。我说的“例外”是指任何时候你想要通过向上传播的对象来打破正常的控制流
异常是一种语言特性。它们是达到目的的手段。它们不是魔法。与任何其他功能一样,当您使用这些功能时,应以您需要它们所能提供的内容为指导,而不是以它们的名称为指导。IMHO,如果程序的进一步执行将导致致命错误或不可预测的行为,则应引发异常。就个人而言,我认为这种讨论纯粹是浪费时间,“什么是例外”是一个错误的问题 异常只是另一种流控制机制,具有某些优点(控制流可以向上传递多个级别的调用堆栈)和缺点(有些冗长,行为不太本地化)
它是否是正确的选择不应该由它的名字来决定。如果将异常简单地称为“bubbleups”,我们会进行这些讨论吗?当有人撕开电源弦时,这是异常情况,大多数其他情况都是可以预料到的。还有另一条很好的经验法则——永远不要使用异常捕捉代码中可以捕捉到的条件 例如,如果有一个方法将两个变量相除,那么不要使用异常来捕获被零除的错误,而是事先进行必要的检查 错误代码示例:
float x;
try {
x = a / b;
{
catch (System.DivideByZeoException) {
x = 0;
}
if (b == 0)
return 0;
好的代码示例:
float x;
try {
x = a / b;
{
catch (System.DivideByZeoException) {
x = 0;
}
if (b == 0)
return 0;
异常通常是昂贵的。我不想讨论异常是否应该用作流控制的圣战,而是要关注异常事件是什么 Oracle在Java环境中是一个例外事件: 异常是发生的事件 在程序执行期间, 这扰乱了正常的水流 程序指令 当然,这个定义通常适用于异常,而不仅仅是Java 这里的关键是“扰乱正常流程”。换句话说,程序失败的方式使它无法完成指令 程序具有定义的功能范围。当您的程序的所有功能都被考虑(包括处理无效输入)时,剩下的任何东西都是异常,很可能是bug 我相信有两种例外: