Ern*_*ano 4 java exception-handling exception try-with-resources
public class SampleCloseable implements AutoCloseable {
private String name;
public SampleCloseable(String name){
this.name = name;
}
@Override
public void close() throws Exception {
System.out.println("closing: " + this.name);
}
}
Run Code Online (Sandbox Code Playgroud)
和主要的课程
public class Main{
public static void main(String args[]) {
try(SampleCloseable sampleCloseable = new SampleCloseable("test1")){
System.out.println("im in a try block");
} catch (IOException e) {
System.out.println("IOException is never thrown");
} catch (Exception e) {
} finally{
System.out.println("finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我在SampleCloseable中的close()方法中删除throws异常时,我收到编译器错误,指出IOException永远不会在相应的try块中抛出.
Rei*_*ica 10
因为你正在抛出一个通用的异常.由于IOException继承自Exception,因此close()方法可能会抛出它.调用者不知道它实际上没有被抛出.它只能看到方法签名,表明它可以.
实际上,close()方法可以自由地抛出任何类型的Exception.当然这是不好的做法,你应该指定你投掷的具体例外情况.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |