Java 异常和 Catch 子句

标签 java exception try-catch

这是我为测试编写的一些简单代码。
我知道我无法定义一个 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()声明它抛出 IOExceptionInvalidClassException扩展 IOException。因此,据您的代码所知,is.read() 可能会抛出 InvalidClassException。所以你可以尝试捕获它。

关于Java 异常和 Catch 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088722/

相关文章:

Swift:来自自定义类的函数调用抛出异常

C++,静态对象的构造函数中的异常绕过先前静态对象的析构函数

java - 自定义异常。在哪里记录

r - 遇到错误时,从列表中删除文件名

Java SimpleDateFormat 解析错误的日期

java - 重写 CameraDevice.statecallback 中的 onError 会出现错误

java - 从数据库检索数据以使用 room 显示用户个人资料信息

c++ - 函数的 try-catch 语法之间的区别

c# - 如果 catch 中的代码失败会发生什么

Java8 和 Aspectj 插件不兼容?