使用 ObjectInputStream 读入的对象在 try-catch 块后不保留值

2024-01-06

因此,我将 Car 对象数组写入文件。然后当我尝试在 cars 变量中读回它们时,我在语句上设置了它们cars = (Car[])in.readObject();。但是,当我使用调试器单步调试它时,一旦退出 try-catch 块,汽车变量就会“取消设置”。

Car[] cars;
try {
    ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename)));
    cars = (Car[])in.readObject();
    in.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

另一方面,如果我初始化 cars 变量,例如初始化为空数组,则 cars 变量在 try-catch 块之后保持设置状态。

Car[] cars = new Car[0];
try {
    ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename)));
    cars = (Car[])in.readObject();
    in.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

那么,为什么 cars 变量仅在我事先初始化时才保留对我用 in.readObject 读入的 Car[] 的引用呢?我不明白为什么无论是否初始化汽车都会有任何区别......无论哪种方式,它都会在 try-catch 块中获取读取 Car[] 对象的引用。

似乎正在发生一些延迟初始化......虚拟机只是在 try catch 块中为 cars 对象声明空间,因此当它退出块时它会超出范围......


它不会被“取消设置”——但你不能read的价值cars在代码之后try/catch在第一个示例中阻止,因为它不是明确指定。 (如果您尝试这样做,您将收到编译时错误。)如果在前两个语句中的任何一个中抛出异常try块,不会为其分配任何值。

您可以通过以下方式修复此问题not只是盲目地捕获异常并在打印堆栈跟踪后继续:

  • 仅捕获您感兴趣的特定异常。catch (Exception e)差不多always一个坏主意
  • 你不一定需要捕捉任何东西 - 你的方法实际上可以吗handle例外吗?如果没有,就声明它可能会被抛出。你总是可以抓住并重新扔掉它。
  • 如果可以的话really处理它,也许你实际上应该分配一个默认值在 catch 块中

如果你遵循这些要点(要么重新抛出,让它冒泡,要么分配一个适当的值),那么变量肯定会被分配,一切都会好起来的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ObjectInputStream 读入的对象在 try-catch 块后不保留值 的相关文章

随机推荐

  • 如何从 calibrateCamera 结果获取相机世界位置?

    我正在使用 calibrateCamera 执行相机校准 输出的一部分是一组 Rodrigues 旋转向量和 3 D 平移向量 我对摄像机的世界位置感兴趣 如果我直接绘制平移点 结果看起来不正确 我觉得我的坐标空间很混乱 但我在解析 ope
  • nginx try_files 和 add_header

    有人可以解释一下吗 我有一个 nginx 服务器块 其中包含以下代码片段 location try files uri uri index html 基本上 我用它来提供 Angular SPA 它运作良好且很棒 现在我想追加Access
  • 显示韩语字符 - iOS 应用程序

    我正在尝试在我的 iPhone 应用程序中显示韩文文本 该应用程序将字母的 Unicode 逐一附加到 NSMutableString 中 并在附加每个字母后在屏幕上显示该字符串 我了解连接字母 Jamo 有一些规则 是否有一个函数可以自动
  • 从函数内部禁用 `functools.lru_cache`

    我想要一个可以使用的功能functools lru cache 但不是默认情况下 我正在寻找一种使用函数参数的方法 该函数参数可用于禁用lru cache 目前 我有该函数的两个版本 其中一个版本带有lru cache和一个没有 然后我有另
  • 导入错误:无法导入名称应用程序

    我正在尝试按照教程进行操作 But from kivy import App gives ImportError cannot import name App 我怎样才能解决这个问题 我已经安装了kivy 1 8 0和cython 0 20
  • c# - 如果方法运行时间太长,则中止方法的执行

    如果运行时间太长 如何中止方法的执行 e g string foo DoSomethingComplex but if DoSomethingComplex 花费的时间太长 比如说 20 秒 然后只需将 foo 设置为 您可以创建一个运行您
  • Spring MVC:表单标签和命令错误

    我正在使用 Spring 框架进行编程 在处理表单标记中的 jsp 第 2 行 时显示以下错误后 我感到绝望 Error ERROR org springframework web servlet tags form InputTag Ne
  • Now.sh 构建中断的原因是:当前未启用对实验性语法“decorators-legacy”的支持

    预期的 添加后decko 对装饰器的支持 以及添加对experimetalDecoractors in my tsconfig js并使用 babel plugin proposal decorators in 包 json My now
  • 有没有办法在 Svelte 中将 props 声明为可选

    我创建了一些带有可选道具的组件 例如hide true 我的问题是 当我不通过该道具时 这些恼人的错误消息总是充斥着我的控制台
  • 点云生成

    我有一个 3D 几何形状 必须将其转换为点云 所得到的点云可以被认为等同于对象的激光扫描输出的点云 不需要生成网格 生成的点可能是均匀分布的 也可能只是随机分布的 没关系 3D形状可以以3D数学公式的形式提供 这必须使用 MATLAB 来完
  • 从命令行指定 dockerignore

    我有一个 dockerignore 文件 但对于一个用例 我想在命令行指定 dockerignore 的内容 例如 docker build ignore node modules t foo 有没有办法从命令行执行此操作 我在文档中没有看
  • ECMAScript 6:WeakSet 的用途是什么?

    WeakSet 应该通过弱引用来存储元素 也就是说 如果一个对象没有被其他任何东西引用 那么它应该从 WeakSet 中清除 我写了以下测试 var weakset new WeakSet numbers 1 2 3 weakset add
  • 更改 HTML 元素的背景颜色

    我有一张包含 100 多个不同大小和尺寸的几何形状的图像 我在它上面使用了图像映射并为每个分配了 ID area like area 我在 MySQL 数据库中存储了有关每个形状的记录 例如 box id color code 1 AEEE
  • 优化 QtCreator 编译器的配置

    我在 Windows 7 中使用 QtCreator 我想将其配置为使用第三级优化 O3 用于 C 编译器 我怎样才能加快我的代码速度以及需要进行哪些更改 尝试将下一行添加到您的 pro 文件中 remove possible other
  • 为标签栏设置背景图像

    我正在尝试以编程方式设置应用程序中选项卡栏的背景图像 我的代码如下 根视图控制器 h IBOutlet UITabBar mainTabBar IBOutlet UITabBarItem settingsBarItem IBOutlet U
  • 在新的命名空间中定义简单类型,例如 xsd:string?

    这应该是直截了当的 但在我看来 它似乎只包含有关复杂类型的信息 假设我已经定义了一个名称空间xmlns address http 现在 从我读到的内容来看 我似乎可以执行以下操作
  • React useState - 每个组件使用一个状态还是多个状态? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用 Hooks Functional 组件来优化 React 并使代码更具可读性的更好方法是什么 每个组件有一个或多个 setState 钩子
  • 拉伸图像以适合 td

    我想在我的 td 单元格中拉伸图像 怎么做 它是一个选项卡图像 看起来像 的倒置 我需要将图像放置在第一个 td 单元格中 其中包含文本 aaa 将位于该图像的中心 如果不使用 CSS3 则无法拉伸背景图像 In CSS3你有背景大小属性
  • 如何解决Jboss部署错误?

    17 19 30 298 ERROR ProfileServiceBootstrap Failed to load profile Summary of incomplete deployments SEE PREVIOUS ERRORS
  • 使用 ObjectInputStream 读入的对象在 try-catch 块后不保留值

    因此 我将 Car 对象数组写入文件 然后当我尝试在 cars 变量中读回它们时 我在语句上设置了它们cars Car in readObject 但是 当我使用调试器单步调试它时 一旦退出 try catch 块 汽车变量就会 取消设置