最终瞬态字段的序列化/反序列化

2024-02-21

In this https://stackoverflow.com/questions/2968876/final-transient-fields-and-serialization问题说final transient序列化后字段不能设置为任何非默认值。那么为什么我有 3 个aVar1变量和 s3 为aVar3多变的?

import java.io.*;
import java.util.*;

class Test
{
    public static void main(String[] args) throws IOException, ClassNotFoundException
    {
        A a1 = new A();
    
        // save a1 to file
        FileOutputStream fileOutput = new FileOutputStream("a.dat");
        ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
        outputStream.writeObject(a1);
        fileOutput.close();
        outputStream.close();
    
        // load a1 from file
        FileInputStream fiStream = new FileInputStream("a.dat");
        ObjectInputStream objectStream = new ObjectInputStream(fiStream);
        a1 = (A) objectStream.readObject();
        fiStream.close();
        objectStream.close();
    
        // fields after deserialization
        System.out.println(a1.aVar1); // 3
        System.out.println(a1.aVar2); // null
        System.out.println(a1.aVar3); // s3
        System.out.println(a1.aVar4); // null
    }
}

class A implements Serializable
{
    public final transient int aVar1 = 3;
    public final transient Map <Object, Object>  aVar2 = new HashMap <> ();
    public final transient String aVar3 = "s3";
    public final transient String aVar4 = new String("s4");
}

反序列化期间,不会调用对象的构造函数。这是由 JVM 处理的特殊对象实例化过程。

对于aVar2和aVar4,调用Hashmap和字符串构造函数。所以这些变量被分配了默认值(null)。

对于aVar1和aVar3,一些常量表达式被分配给它们。这些称为编译时常数。

编译时间常数的条件是

  1. 它们必须被宣布为最终的
  2. 它们是原始数据类型或字符串
  3. 它们必须用它们的声明来初始化。
  4. 它们的值必须是常量表达式。

编译时间常数会受到影响,这些值将在反序列化后保留。

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

最终瞬态字段的序列化/反序列化 的相关文章

  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • AssertionFailedError:布尔方法为 null

    我正在测试一个方法 该方法接受两个对象作为参数并返回一个boolean 当我使用和assertTrue or assertFalse对于有问题的方法 我得到以下测试失败 junit framework AssertionFailedErro
  • 是否有可能毁掉 CDI 瞄准镜?

    我正在开发一个 Java EE 应用程序 主要是带有 JSF 管理控制台的 JAX RS 它使用 CDI Weld 进行依赖项注入javax enterprise context ApplicationScoped http downloa
  • 如何确保重写的方法是同步的

    我有一类线程安全的通用代码 该类中的方法之一是抽象的 需要针对不同的实现进行重写 我需要确保或至少向其他开发人员标记该方法的所有实现都需要是线程安全的 做这个的最好方式是什么 是否有关键字或注释来实现此效果 我已经尝试过了abstract
  • 获取数组的整行

    我下面有以下代码 我想要获取整行 而不仅仅是原始数组的第 1 列 我该怎么做 Sub Example1 Dim arrValues As Variant Dim lastRow As Long Dim filteredArray Dim l
  • 找不到 MongoRepository (Spring Boot) 的 bean

    我在用spring boot and MongoDB Spring version 4 3 9 Spring boot version 1 5 4 我正在创建一个实现的存储库MongoRepository interface 如下所示 im
  • 如何在 Eclipse ant 编辑器中启用撤消功能?

    在 Eclipse 的 ant 编辑器中 撤消对我不起作用 当我按 Ctrl Z 时 没有任何反应 是否可以以某种方式启用撤消或者这是一个错误 我在 Windows XP Professional 上使用 Eclipse 3 4 2 Gan
  • Firebase 函数仅授权来自 Firebase 托管应用的请求

    我有一个简单的 Firebase Hosting Web 应用程序 基于 Vue 应用程序 它调用 Firebase 函数 Google 云函数 import firebase from firebase app import fireba
  • 大数计算错误:为什么会发生这种情况? [复制]

    这个问题在这里已经有答案了 我在 repl it 中创建了一个小型 Python 程序来说明 Collat z 猜想 该猜想表示 如果以任意正整数 n 开头 并递归地应用以下运算 如果 n 为偶数 则为 n 2 如果 n 为偶数 则为 3n
  • 发送消息时如何使用 Selenium 在 WhatsApp 中换行?

    消息发送功能 template other Text More Text Much more text def send message driver answer driver find element by xpath XPATH cl
  • 使用 Google Maps API V3 确定标记是否位于 KML 图层边界内

    有没有办法确定标记是否已进入 KmlLayer 覆盖的区域 我的 kml 主要由
  • r:使用所有可能的选项和变量组合数量创建数据框

    这个问题可能很明显或已经被问过 但我找不到解决方案 我想创建一个包含所有可能组合 和变量数量 的数据框 如下例所示 dataframe lt data frame variable 1 4 a c gender NA NA NA b c a
  • 使用 Azure API 管理模拟故障转移

    Azure API 管理支持多区域部署 这对于我们的 API 和后端服务的 HA 非常有用 我们正在使用它来测试我们的多区域部署 但是 我们如何测试它呢 我们如何模拟或手动触发 API 管理上的故障转移 提前致谢 APIM 的优质捆绑提供了
  • 使用 xargs 进行并行 Python 脚本

    我目前有一个 bash 脚本 script sh 带有两个嵌套循环 第一个枚举 a 的可能值 第二个枚举 b 的可能值 例如 bin sh for a in 1 10 do for b in 1 10 do nohup python scr
  • Nuxt SSR - 我无法检查用户是否经过身份验证

    我正在尝试使用带有会话身份验证的 Django 后端的 Nuxt SSR 前端 我希望在我的前端中有一些 SSR 页面以及客户端渲染的页面 所以我正在使用通用模式 问题是我没有找到一种工作方法来在加载页面之前检查用户是否经过身份验证 因此我
  • Grails 条件可为空验证或带有可为空选项的自定义验证器

    我有一个表格来创建一个地方 根据国家 地区的不同 省 州 地区 字段是否为必填项 当不需要时 我希望为null 而不是空字符串 我有使所有空表单字段为空的代码 def newparams place new Place params eac
  • 在 MSBuild 中获取本机 exe 的文件版本

    我在 Visual Studio 2010 解决方案中有许多 Visual C 项目 此解决方案中还有一个 WiX 项目 它为可执行文件 C 项目之一的产品 构建安装程序 可执行文件在其项目中有一个资源文件 它将程序的版本写入可执行文件 现
  • Nuget Config.Transform 格式问题

    我创建了一个Nuget 配置转换文件 http docs nuget org docs creating packages configuration file and source code transformations具有以下变换
  • ActivityInstrumentationTestCase2 中的模拟帐户

    在我的活动中 我获得了帐户onCreate public void MyActivity extends Activity private Account accounts Override protected void onCreate
  • 什么是概率数据结构?

    我读过有关 概率 数据结构的内容 例如布隆过滤器和跳过列表 概率数据结构有哪些共同特征以及它们的用途是什么 可能有很多不同的 并且很好的 答案 但以我的拙见 概率数据结构的共同特征是它们为您提供近似的而不是精确的答案 这里有多少件物品 大约
  • 最终瞬态字段的序列化/反序列化

    In this https stackoverflow com questions 2968876 final transient fields and serialization问题说final transient序列化后字段不能设置为任