Java异常和Catch子句
下面是我为测试编写的一些简单代码
我知道我不能定义一个catch块来捕获try块中的代码没有声明要抛出的已检查异常(因为它将包含无法访问的语句,并且编译器不允许我这样做)
那么,这里到底发生了什么?(java.io.InvalidClassException是Exception的子类,因此它是一个选中的异常。)
import java.util.*;
import java.io.*;
class Test {
public void copy() {
try (InputStream is=new FileInputStream("file1");
OutputStream os=new FileOutputStream("file2");) {
byte[] buffer=new byte[1024];
int bytesRead=0;
while ((bytesRead=is.read(buffer)) != -1) {
os.write(buffer,0,bytesRead);
}
}
catch (java.io.InvalidClassException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
代码编译得很好。。。这怎么可能
# 1 楼答案
^{} 声明它抛出} 扩展了
IOException
^{IOException
。因此,就您的代码所知,is.read()
可能会抛出InvalidClassException
。所以你可以试着抓住它# 2 楼答案
InvalidClassException
是IOException
的一个子类型,它可以由InputStream#read()
和OutpuStream#write()
方法抛出,所以try-catch块在这里是有效的