java - 有什么理由抛出 'Exception' 并立即捕获它吗?

标签 java exception try-catch

<分区>

此代码来 self 们的项目,生产代码:

if (changedToNull) {
    try {
        throw new Exception();
    } catch (Exception e) {
        log.debug("changedToNull", e);
    }
}

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

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

最佳答案

主要目的是为了调试目的进入if block 时获取调用堆栈,但它可以重写为下一个:

if (changedToNull) {
    log.debug("changedToNull", new Exception("changedToNull is true"));
}

假设 changedToNull 永远不应该是 true 并且您想获取调用堆栈以了解它是如何发生的,您可以按此方式进行。


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

if (changedToNull && log.isDebugEnabled()) {
    ...
}

关于java - 有什么理由抛出 'Exception' 并立即捕获它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666578/

相关文章:

c++ - 将 NULL 指针访问转换为 Linux/GCC 下的 C++ 异常

c# - Try-catch 加速我的代码?

c++ - 重新抛出异常

java - Caused by : java. lang.ClassCastException : libcore. reflect.ParameterizedTypeImpl cannot be cast to java.lang.Class when use Generic Type 问题

java - 如果程序不等待输入,如何修复扫描仪的 "No line found"异常

java - org.hibernate.exception.GenericJDBCException : could not execute statement in hibernate

java - 动态方法中的 InvokingTargetException

JavaScript catch 参数已定义

perl - 如何在 Perl 中捕获鲤鱼的输出?

java - 输入重定向到 Java - 找不到或加载主类