簡體   English   中英

Java異常和Catch子句

[英]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 所以你可以嘗試抓住它。

InvalidClassExceptionIOException的子類型,可以通過InputStream#read() OutpuStream#write() InputStream#read()OutpuStream#write()方法拋出,因此try-catch塊在此處有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM