什么是java中的静噪?

时间:2014-09-14 06:16:49

标签: java exception exception-handling try-catch

我有一段代码,我的教授评论说,"这被称为静噪"并且这在编程中是一个巨大的罪。

这是我的代码,

            if (command.matches(input)) {
            try {
                command.execute();
            } catch (UniversalException e) { 
            }
            return;
        }

"静噪"在catch()内。我从研究中得到了一个关于这是什么的想法,但如果有人能用更简单的术语向我解释,我会很感激。另外,如何避免静噪也会很好。

此外,如果有帮助,那段代码还包括

public UniversalException() {
    System.out.println("The file you entered could not be located. Please try again.");
}

在另一个类中,即用户输入无效文件名时打印出来的内容。

我还没有理解这些异常的东西,我的教授只是要求向用户打印一条好消息,而不是堆栈跟踪。

2 个答案:

答案 0 :(得分:6)

这是一个有趣的,如果描述性的名称:)

如果我没有误解你的教授所说的话,那么问题就是在你的“陷阱”里面,你什么都不做。你不打印一个很好的错误信息,你不记录错误,你不抛出异常,以便其他人可以处理它,你不显示堆栈跟踪...

如果try块中的代码抛出一个UniversalException,那么空的catch块会导致该错误被静默忽略,抑制或squelched

解决方案非常简单 - 在catch块中执行某些操作。永远不要忽视错误 - 至少,你应该至少打印或记录一些东西,以便你知道出了什么问题。


现在,看起来您实际上是在UniversalException类的构造函数中打印错误消息。我会把它移到catch块中。一个空的挡块感觉有点像飞过你手臂的苍蝇 - 它只是感觉错误,即使你在其他地方记录错误。

许多程序员之所以对空掣块有这种本能反感的原因是因为它通常表明是地雷。每当我看到一个空的catch块时,通常意味着前一个编码器故意选择忽略代码中的错误并希望最好,这几乎不是正确的事情。这并不是让你对代码库状态保持乐观的事情。

在catch块中而不是在构造函数中打印错误消息也更有用,因为您还可以在方法中打印出局部变量的值并检查抛出的特定异常,这样可以更容易地调试问题

答案 1 :(得分:1)

您的代码捕获异常(在本例中为UniversalException的实例)并且不对其执行操作。这样,既然异常既不允许“向上”传播也不以任何方式处理,你实际上隐藏了它曾经发生的事实。