[英]Java Exceptions and Catch Clause
這是我為測試編寫的一些簡單代碼。
我知道我無法定義一個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();
}
}
}
代碼編譯得很好......怎么可能?
is.read()
聲明它拋出IOException
。 InvalidClassException
擴展IOException
。 因此,就您的代碼所知, is.read()
可能會拋出InvalidClassException
。 所以你可以嘗試抓住它。
InvalidClassException
是IOException
的子類型,可以通過InputStream#read()
OutpuStream#write()
InputStream#read()
和OutpuStream#write()
方法拋出,因此try-catch塊在此處有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.