Sej*_*nus 7 java exception-handling exception
在学习Java时,我经常偶然发现这个错误.它是这样的:
未报告的异常java.io.FileNotFound异常; 必须被抓住或宣布被抛出.
java.io.FileNotFound只是一个例子,我见过很多不同的.在这种特殊情况下,导致错误的代码是:
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("myfile.pdf")));
Run Code Online (Sandbox Code Playgroud)
将语句放入try/catch块后,错误总是消失,代码编译并成功运行.有时它对我来说足够好,但有时候不行.
首先,我正在学习的例子并不总是使用try/catch,但显然应该可以工作.
更重要的是,有时当我将整个代码放入try/catch中时,它根本无法工作.例如,在这种特殊情况下,我需要out.close(); 在最后{}块; 但如果上述本身的语句是内部试{} ,最后{}犯规"看" 出来,因此不能关闭它.
我的第一个想法是导入java.io.FileNotFound; 或其他相关例外,但它没有帮助.
cle*_*tus 12
您所指的是检查异常,这意味着必须声明或处理它们.用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) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
它难看吗?当然.它是冗长的吗?当然.Java 7将使ARM块更好一些,但在此之前你会遇到上述问题.
您也可以让调用者处理异常:
public void doStuff() throws IOException {
InputStream in = new InputStream(...);
// do stuff
in.close();
}
Run Code Online (Sandbox Code Playgroud)
虽然那时close()应该把它包裹起来finally.
但是上面的函数声明说这个方法可以抛出一个IOException.由于这是一个已检查的异常,因此该函数的调用者将需要catch它(或声明它以便其调用者可以处理它等等).
| 归档时间: |
|
| 查看次数: |
38341 次 |
| 最近记录: |