【发布时间】:2011-01-08 22:26:48
【问题描述】:
我知道
throw new Exception();
具有相当大的开销,因为它会创建完整的 stackTrace 等。
有没有
throw new Throwable();
出现同样的问题?这种行为是继承的,还是抛出 Throwable 的开销更小(没有)?
编辑
从分析员的角度来看,用户输入错误的密码是程序正常执行顺序的一个例外。所以如果我有:
public Session newSession() {
validate_user_and_password();
}
从分析师的角度来看,抛出 UserNotValidException 听起来是正确的。
如果你的代码有很好的抽象,返回 null 或 0 听起来是不正确的。我只是想知道我是否可以在代码中真正实现这一点,或者我是否必须把它留给理论。
编程观点异常和分析师观点异常之间有很大的区别。
注意:我给出了一个非常简单和愚蠢的例子,这不是我的情况。
注意 2:我知道返回 null 是很平常的事情,但我需要有适当的抽象和 OO 代码,而且我个人认为这没有什么坏处。
【问题讨论】:
-
为什么会这样?功能要求是什么?
-
无论如何你都不应该在常规情况下使用异常——它们应该只在异常的情况下使用。
-
@anon 它们应该用于“异常代码路径”,它可能会或可能不会像人们想象的那样异常。例如,如果您避免填充堆栈跟踪,最好使用它们来发出流结束的信号,而不是在每次读取后检查结束。 (但这不适用于遍历数组,其中 VM 知道全长。)
-
认为他的意思是“业务分析师”中的“分析师”。
-
“annalist”的意思是“历史学家”。