有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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();
    }
  }

}

代码编译得很好。。。这怎么可能


共 (2) 个答案

  1. # 1 楼答案

    ^{}声明它抛出IOException^{}扩展了IOException。因此,就您的代码所知,is.read()可能会抛出InvalidClassException。所以你可以试着抓住它

  2. # 2 楼答案

    InvalidClassExceptionIOException的一个子类型,它可以由InputStream#read()OutpuStream#write()方法抛出,所以try-catch块在这里是有效的