什么是java中的静噪?

Xat*_*yrn 5 java exception-handling exception try-catch

我有一段代码,我的教授评论说,"这被称为静噪",这是编程中的一大罪.

这是我的代码,

            if (command.matches(input)) {
            try {
                command.execute();
            } catch (UniversalException e) { 
            }
            return;
        }
Run Code Online (Sandbox Code Playgroud)

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

此外,如果它有帮助,那么一点代码也包括在内

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

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

我还不了解任何这个异常的东西,我的教授只是要求向用户输出一条好消息,而不是堆栈跟踪.

Mic*_*x2a 6

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

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

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

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


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

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

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