这是我为测试编写的一些简单代码。
我知道我无法定义一个 catch block 来捕获 try block 中的代码未声明抛出的已检查异常(因为它会包含无法访问的语句并且编译器不会让我这样做)。
那么,这里到底发生了什么? (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();
}
}
}
代码编译正常...这怎么可能??
最佳答案
is.read()
声明它抛出 IOException
。 InvalidClassException
扩展 IOException
。因此,据您的代码所知,is.read()
可能会抛出 InvalidClassException
。所以你可以尝试捕获它。
关于Java 异常和 Catch 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088722/