Why*_*ugo 27 java exception throwable
我知道
throw new Exception();
Run Code Online (Sandbox Code Playgroud)
有一个相当大的开销,因为它创建了一个完整的堆栈跟踪等
是否
throw new Throwable();
Run Code Online (Sandbox Code Playgroud)
出现同样的问题?这种行为是继承的,还是抛出Throwable有一个较小的(o no)开销?
编辑
从分析师的角度来看,插入错误密码的用户是程序正常执行顺序的例外.所以,如果我有:
public Session newSession() {
validate_user_and_password();
}
Run Code Online (Sandbox Code Playgroud)
从分析师的角度来看,抛出UserNotValidException听起来是正确的.如果您的代码具有相当好的抽象,则
返回null
或者0
听起来不正确.我只是想知道我是否可以在代码中实现这一点,或者如果我不得不将它留给理论.
编程视点异常与分析师视点异常之间存在很大差异.
注意:我给出了一个非常简单而愚蠢的例子,这不是我的情况.
注2:我知道返回null
将是普通的事情,但我需要有适当的抽象和OO代码,而且,就个人而言,我认为没有任何损害.
Asa*_*aph 49
Throwable
在创建堆栈跟踪时也会创建堆栈跟踪.来自java文档Throwable
:
throwable包含其创建时线程执行堆栈的快照.
因此,就创建堆栈跟踪的开销而言,Exception
和之间应该没有区别Throwable
.
如果您使用"异常事件"的异常(就像您应该这样),那么您不应该过多关注堆栈跟踪的开销.在运行代码中很少发生异常事件.因此,异常不应以任何重要方式影响正常代码的性能.
aku*_*uhn 37
不,你需要自己的子类来避免这种影响.
Exception ex = new Exception() {
@Override public Throwable fillInStackTrace() {
return this; // and do nothing else
}
};
Run Code Online (Sandbox Code Playgroud)
这会创建一个异常实例,它不会填充堆栈跟踪(创建委托fillInStackTrace
实际填充堆栈跟踪的异常),因此创建起来很便宜.
归档时间: |
|
查看次数: |
53348 次 |
最近记录: |