Unw*_*ast 6 java exception try-catch
我正在阅读关于异常和断言的章节中的Java教科书,并且遇到了这个代码块,我有一个问题.
public boolean searchFor(String file, String word)
throws StreamException
{
Stream input = null;
try {
input = new Stream(file);
while (!input.eof())
if (input.next().equals(word))
return true;
return false; //not found
} finally {
if (input != null)
input.close();
}
}
Run Code Online (Sandbox Code Playgroud)
在下一段中,文本说"该searchFor方法声明它抛出,StreamException以便生成的任何异常在清理后传递给调用代码,包括StreamException调用close所引发的任何异常.
我的印象是,包含一个throws子句允许程序员抛出异常的特定类(或子类),并且当且仅当它或它的一个超类在throws子句中时,才能抛出一个类.但是在这里,有一个throws条款没有throw声明try.那么首先包括该条款有什么意义呢?在代码中的位置会StreamException被捕获?
在代码中的位置会
StreamException被捕获?
该try有finally,但没有catch.该finally会执行,并Exception会传播到调用者.
关键是要确保流关闭,无论方法中发生了什么。迭代流时抛出的任何内容都会被抛出给调用者。(每个调用者依次可以自由地捕获异常或将其抛出给其调用者,依此类推。)
如果此代码使用 try-with-resources,那么这将确保关闭时引发的异常无法掩盖迭代流时引发的异常。(如果 close 方法抛出异常,那么调用者就会看到这样的情况,即使 try 块中的某些内容抛出了某些内容。)