java - 为什么我必须提供标识符?

标签 java exception

在代码中:

try
{
    System.out.print(fromClient.readLine());
}
catch(IOException )//LINE 1
{
     System.err.println("Error while trying to read from Client");
}

在标记为 LINE 1 的代码行中,编译器强制我提供标识符,即使我没有使用它。为什么会有这种不自然的约束?然后,如果我键入一个标识符,我会收到未使用标识符的警告。它只是对我来说没有意义,迫使程序员做一些不必要和多余的事情。在我之后,有人会修改这段代码,并且会想知道我是否故意没有使用这个变量,或者我只是忘记了。所以为了避免我不得不写额外的评论来解释为什么我不使用我的代码中不必要的变量。
谢谢

最佳答案

为了使编译器的解析更简单,标识符名称是必需的。在 catch 子句中省略异常是被认为是不好的做法 恕我直言,这很少是一个好主意 - 在生产代码中,您应该(几乎总是)打印/记录它和/或重新抛出它。因此,不使用标识符名称应该是异常(exception)(没有双关语意)而不是规则。

但是如果你真的有充分的理由omit不使用它,你可以添加评论来解释你的观点,[Update2] 和/或告诉你的IDE 禁止对特定代码块进行这种检查(大多数 IDE 允许这样做)[/Update2]

更新:好吧,“糟糕的做法”这个词可能太强了:-)让我试着更好地解释我的观点。

我的意思是,通常当您捕获异常时,最好尝试记录/使用尽可能多的信息。这意味着您实际上引用了异常变量。

在您上面的示例中,如果您仅记录“尝试从客户端读取时出错”,那信息量非常有限。问题的实际原因可能是(只是一些猜测)损坏的文件、网络错误、格式错误......在 IOException 中记录数据将提供更多关于它的详细信息,使问题更容易修复。

关于java - 为什么我必须提供标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781544/

相关文章:

java - 从 Java 生成 WSDL 时出错

java - 如何更改 GWT 的小部件 CSS 值?

安卓java.net.SocketException :socket failed: EACCES (Permission denied)

php - 在文件未上传的 PHP 中尝试 catch 语句

.net - 为什么 WPF Dispatcher.Invoke 不传播异常?

python - 如何找出哪个索引超出范围?

java - 让 gwt-syntaxhighlighter 工作

java - OpenCV java获取像素颜色

Java 和 Hibernate,如何

java - 当只期望一个值但存在多个值时抛出什么内置异常