在创建javaodc时,您描述了方法可能抛出的异常,对吗?
看看示例:
public void createLogFile() {
try {
file.createNewFile();
fileWriter = new FileWriter(file);
bufferedWriter = new BufferedWriter(fileWriter);
} catch (IOException e) {
MainScene.ausgabeText.setText("Fehler bei dem Erstellen des Log Files.");
}
}
这是该方法的javadoc。
/**
* A logfile will be created
* @exception IOException
* When the log file coulndt be created ( just a test :-))
*/
当导出到Javadoc时,Eclipse会告诉我:
error: exception not thrown: java.io.IOException
* @exception IOException
但是Eclipse要我捕获该异常。
为什么我的Eclipse给我上面的错误消息?
答案 0 :(得分:4)
有两种处理Exception
的方法:
将其捕获到方法内部,在方法外部没有人会知道发生了异常,因此,您can't write in the Javadoc
将此方法抛出异常(隐式将抛出 )
/**
*/
public void createLogFile() {
try {
//...
} catch (IOException e) {
//...
}
}
您让Exception传播到您的方法之外,在这种情况下,您can writ in the Javadoc
认为此方法可以引发Exception(隐式地 抛出)
/**
* @throws IOException When the log file coulndt be created
*/
public void createLogFile() throws IOException {
//...
}
注意:标签@throws
和@exception
是同义词。 Ref
答案 1 :(得分:4)
编写方法时,实现对调用者是隐藏的(忽略事实,如果您自己编写,则可以看到方法实现)。有时,在方法的实现中,您会遇到异常(或者甚至可能引发自定义异常)。您可以做两件事:
想要 处理异常时,可以捕获到异常。这意味着您知道可能出了问题,并且知道该怎么做,以便程序可以按可预测的方式继续进行。
由于调用者看不到您的实现,因此对他们完全隐藏了。
当您不希望处理异常时,因为它更适合调用者了解此问题并进行处理,因此它更适合。在这种情况下,您不会catch
将其Exception
通过throws
关键字添加到方法中。执行此操作时,您可以 在Javadoc方法中添加@throws
或@exception
注释,以准确告知调用者何时希望接收特定异常。
由于注释仅用于告知调用方何时期望以及如何正确处理该方法引发的异常,因此添加该方法未引发的任何异常都是没有意义的。
请注意,您只需要throws
个已检查的例外。方法不需要通过throws
列出未检查的异常,因为它们通常是由编写不良的代码引起的。
答案 2 :(得分:3)
该函数应引发您在javadoc注释中定义的Exception。实际上,您没有抛出IOException。您正在捕捉它。
public void createLogFile() throws IOException {
try {
file.createNewFile();
fileWriter = new FileWriter(file);
bufferedWriter = new BufferedWriter(fileWriter);
} catch (IOException e) {
MainScene.ausgabeText.setText("Fehler bei dem Erstellen des Log Files.");
}
}
答案 3 :(得分:3)
您不应在Javadocs IOException
子句中包含@throws
,因为您从不会抛出一个子句。
显然,Eclipse试图确保方法throws
的子句列表与Javadocs中的列表匹配。
// valid
/**
* ...
* @throws IOException description
*/
void createLogFile() throws IOException { ... }
// invalid
/**
* ...
* @throws IOException description
*/
void createLogFile() { ... }
// bad documentation
/**
* ...
*/
void createLogFile() throws IOException { ... }
考虑文档的叙述风格。您可以说“创建日志文件”代替“将创建日志文件”。