在学习Java时,我经常会偶然发现此错误。它是这样的:
Unreported exception java.io.FileNotFound exception; must be caught or declared to be thrown.
java.io.FileNotFound只是一个例子,我见过很多不同的例子。在这种情况下,导致错误的代码是:
java.io.FileNotFound
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("myfile.pdf")));
一旦将语句放入try / catch块中,错误总是消失并且代码编译并成功运行。有时对我来说已经足够了,但有时却不行。
try / catch
首先,我从中学习的示例并不总是使用try / catch,但是显然应该可以使用。
更重要的是,有时当我将整个代码放在try / catch中时,它根本无法工作。例如在这种情况下,我需要out.close(); 在finally {}区块中;但如果上述本身的语句是内部试{} ,最后{}犯规“看” 出来,因此不能关闭它。
out.close()
finally {}
{}
我的第一个想法是导入java.io.FileNotFound; 或其他相关异常,但没有帮助。
你所指的是检查异常,这意味着必须声明或处理它们。用Java处理文件的标准结构如下所示:
InputStream in = null; try { in = new InputStream(...); // do stuff } catch (IOException e) { // do whatever } finally { if (in != null) { try { in.close(); } catch (Exception e) { } } }
丑吗?当然。冗长吗?当然。Java 7将通过ARM块使其变得更好一些,但是直到那时,你仍然只能使用上面的代码。
你还可以让调用方处理异常:
public void doStuff() throws IOException { InputStream in = new InputStream(...); // do stuff in.close(); }
尽管即使这样,也close()应该将其包装成一个finally块。
close()
finally
但是上面的函数声明说这个方法可以抛出一个IOException。由于这是一个已检查的异常,此函数的调用者将需要catch它(或声明它,以便其调用者可以处理它,依此类推)。
IOException
catch