有没有理由抛出"异常"并立即抓住它?

Kor*_*gay 12 java exception try-catch

这段代码来自我们的项目,生产代码:

if (changedToNull) {
    try {
        throw new Exception();
    } catch (Exception e) {
        log.debug("changedToNull", e);
    }
}
Run Code Online (Sandbox Code Playgroud)

开发人员不再与我们合作.

为什么有人会抛出Exception并直接捕获并记录它?

Nic*_*tto 23

主要目的是在您输入此if块以进行调试时获取调用堆栈,但可以将其重写为下一个:

if (changedToNull) {
    log.debug("changedToNull", new Exception("changedToNull is true"));
}
Run Code Online (Sandbox Code Playgroud)

假设changedToNull永远不应该这样true,你想让调用堆栈理解它是如何发生的,你可以这样做.


创建一个调用堆栈是非常昂贵的,所以你应该debug通过检查下一个值isDebugEnabled()(假设你使用log4j)来确保启用该级别:

if (changedToNull && log.isDebugEnabled()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)