关于java中static关键字修饰的属性无法被序列化的解释说明

Java static关键字深度解析:从字节码到JVM内存模型 static是Java中连接语言语法与JVM底层机制的核心概念,其本质并非‘静态存储’,而是通过ACC_STATIC标志位实现类级别绑定。它决定字段和方法在类加载准备阶段即分配内存(Metaspace中),生命周期与类同步,不依赖对象实例。这一特性支撑了工具类设计、单例模式、常量定义和静态内部类等关键实践,同时带来内存泄漏、类加载死锁、序列化异常等典型风险。理解static需回归字节码层面——static方法无this指针,调用使用invokestatic指令;static变量初始化发生在<clinit>方 阅读详情

static修饰的属性不能被序列化的原因是:被static修饰的属性是所有类共享的,如果可以序列化,就会出现下面的情况,当我们序列化某个类的一个对象到某个文件后,这个文件中的对象的那个被static修饰的属性值会固定下来,当另外一个普通的的对象修改了该static属性后,我们再去反序列化那个文件中的对象,就会得到和后面的对象不同的static属性值,这显然违背了static关键字诞生的初衷。

为什么无法序列化静态变量? 在Java中,静态变量是属于类而不是对象的,它们与类的定义相关联,而不是与对象的实例相关联。在对象被序列化和反序列化的过程中,并没有对静态变量进行处理,因此无法恢复静态变量的值。总结起来,静态变量不能被序列化是因为它们属于类而不是对象,并且在序列化过程中不会被包括在序列化的数据中。在序列化过程中,只有对象的实例变量会被持久化保存,而静态变量不会被包括在序列化的数据中。然后,可以通过自定义的序列化方法在序列化和反序列化过程中手动保存和恢复静态变量的值。的值在反序列化后并没有被恢复,而实例变量。 阅读详情

相关推荐

codesys【modbusRTU】主站

【代码】modbusRTU【codesys】

cfqq1989的博客 4370

Java - 序列化和反序列化为什么要实现Serializable接口?

Java - 序列化和反序列化为什么要实现Serializable接口?

716

MIT 6.824分布式 LAB4A:ShardCtrler

lab 4要求实现一个使用raft共识算法的分片存储系统。而在lab 4a中,我们仅需实现分片控制器的功能。lab4中的分片存储系统有多个分片,这些数据分布在众多分片上,而每个分片都对应着一个集群组,可能一个集群组负责多个分片,一个集群组内的所有服务器都会使用raft共识算法进行状态的复制。而本实验的重点为分片控制器,主要负责的工作是对集群组和分片之间关系的管理,我们仅需在/src/shardctrler文件夹中对client.go,server.go,common.go这三个文件进行修改即可。注意事项(实

MarksSa的博客 831

对象序列化的细节,Static属性不参与对象的序列化

定义一个学生信息类    身高tall为静态属性输出为99   static属性定义在类文件中之后,在其他类中调用该属性,并更改了tall的值,只是更改了内存中tall的值,类文件中定义的tall并没有受到影响,在调用时,先把类文件加载到内存中 ,修改得只是内存中tall的值,类文件定义的信息没有发生改变。当重新创建一个类去调用tall时 这时把类文件重新加载到内存中, 输出的还是类文件中的值。所...

可爱的程序yuan 4103

别再只会用Excel了!Minitab 21手把手教你搞定SPC控制图(从数据导入到结果解读)

本文详细介绍了如何使用Minitab 21高效制作SPC控制图,从数据导入到结果解读的全流程。通过对比Excel的局限性,展示Minitab在自动化计算、图表标准化和特殊原因检验等方面的优势,帮助质量管理人员提升工作效率和数据分析专业性。

weixin_30878501的博客 380

人工智能,不止于模型:四步实现完整工作流

工程师越来越多地致力于将人工智能 (AI) 集成到自己的项目和应用中,同时不断着力提升自己的 AI 技能。面对 AI 问题,工程师首先要了解什么是 AI,以及如何将它纳入当前工作流,这看似简单,实则未必容易。在 Google 中搜索“什么是 AI?”会得到数百万条结果,包括不同程度的技术和相关信息。那么,对工程师而言,AI 意味着什么?人们对 AI 的关注主要集中在 AI 模型上,受此影响,工程师会迅速投入 AI 建模的研究。

r1832644594的博客 2805

java反序列化

  之前介绍过java内置的序列化,今天总结下java的反序列化,主要介绍一点吧,它是怎么跳过构造函数生成对象的,当然跳过不是故意的,因为它本身实现就没依赖构造函数。比如我们定义了一个private的构造函数的bean,它序列化后的数据仍然可以反序列化出来。总之吧,反序列化不会触发构造函数的逻辑。   反序列化时调用链: objectInputStream.readObject()-&gt; ...

yanyuan904的专栏 1725

STM32F103 CAN通信避坑指南:从标准库配置到收发测试的完整流程

本文详细介绍了STM32F103 CAN通信的实现流程,从标准库配置到收发测试,帮助开发者避开常见陷阱。内容涵盖硬件连接、波特率计算、过滤器配置及错误处理等关键环节,提供实用的代码示例和调试技巧,确保CAN通信的稳定性和可靠性。

weixin_30627341的博客 324

怎么防止反射、序列化问题,实现一个完美的单例?

1、编码实现的单例 静态内部类方式(JVM类加载实现) public class Singleton { private Singleton() {} private static class SingleTonHolder { static final Singleton INSTANCE = new Singleton(); } // 调用 getInstance 方法,才获取加载 SingleTonHolder,JVM保证只会有一个线程对类进行加载

weixin_42245133的博客 372

一个车载HUD的设计参考

一个车载HUD的设计参考

weixin_72050316的博客 796

基于opencv的鱼群检测和数量统计识别鱼群密度带界面

摘要:本项目利用OpenCV图像处理技术实现了视频鱼类自动检测计数系统。通过背景减除、形态学处理和轮廓检测等方法,在视频帧中标记鱼类并统计数量。系统包含视频读取、前景提取、轮廓分析、中心点跟踪等核心功能,可实时显示计数结果。适用于水产养殖、生态监测等领域,具有实用价值。未来可通过参数优化、引入深度学习和多目标跟踪技术进一步提升准确性。(147字)

1719

Java关键字及其作用详解

Java中的关键字有如下表格中这么多 下面分别解释一下每个关键字的含义。 private 一种访问控制方式:私用模式 protected 一种访问控制方式:保护模式 public 一种访问控制方式:共用模式 abstract 表明类或者成员方法具有抽象属性 class 类 extends 表明一个类型是另一个类型的子类型,这里常见的类...

z1web的博客 2万+

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 776

面试官:告诉我为什么static和transient关键字修饰的变量不能被序列化?

好啦,今天针对为什么static和transient关键字修饰的变量不能被序列化进行了一个解释,下次大家在面试的时候再被问道就可以这样回答啦,不过,还有的BT面试官会问transient关键字修饰的变量真的不能被序列化吗?这个问题咱们后面继续讨论哈。

JavaBuild的博客 726

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java记——注释、关键字、修饰符

在计算机语言中,注释是计算机语言的一个重要组成部分,用于在源代码中解释代码的作用,可以增强程序的可读性,可维护性。Java 关键字不能用于常量、变量、和任何标识符的名称。Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。提示:以下是本篇文章正文内容,下面案例可供参考今天就先写到这里,希望明天还能继续,加油!

qq_57065482的博客 959

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java序列化和反序列化实战指南

序列化:将对象转换为字节序列的过程。这通常用于将对象持久化到磁盘或数据库中,或者通过网络传输对象。反序列化:将字节序列恢复为对象的过程。这是序列化的逆过程,用于从持久化存储或网络接收的数据中重建对象。实现接口是对象能够被序列化的前提。显式指定可以确保类的版本兼容性。使用transient关键字可以排除不需要序列化的属性。static属性由于属于类而不是对象,不会被序列化。希望这些实战经验对你有所帮助,让你在Java序列化和反序列化的道路上更加顺畅!

m0_37643701的博客 988

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 修饰符(提供了很多修饰符)

抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。

2501_93452191的博客 1689

java修饰符

java修饰符

weixin_51884452的博客 2108

java修饰符详解

基础不牢,地动山摇!!! 一些相关的名词 关键字,修饰符,标识符 关键字: Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。 关键字汇总和解释详见下表: abstract assert boolean break byte case catch c...

weixin_42689765的博客 772

Java修饰符

一、知识点 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端。 我们通过下面的例子来说明: 二、访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以private修饰符指定,在同一类内可见。 共有的,以public修饰符指定,对所有类可见。 受保护的,以protected修饰符指定

kids_fan的博客 3628

java字段修饰符_java中的修饰符分为类修饰符,字段修饰符,方法修饰符

java中的修饰符分为类修饰符,字段修饰符,方法修饰符。根据功能的不同,主要分为以下几种。1、权限访问修饰符public,protected,default,private,这四种级别的修饰符都可以用来修饰类、方法和字段。包外子类包内类内publicyesyesyesyesprotectednoyesyesyesdefaultnonoyesyespriv...

weixin_36340890的博客 1080

Java 修饰符

抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。//抽象方法。

JiuMeilove的博客 1076

关键字之transient

Java当中的transient  要解释这个关键字 需要先了解什么是Serializable序列化 一个类在实现了Serializable接口之后,这个类是可以被序列化的,但是有些属性不想将其序列化时 我们就可以用到  transient 关键字来修饰该属性, 这样就会在序列化的时候忽略该属性 import java.io.Serializable; //这是一个简单的序列化类 //其...

qq_36117744的博客 286

transient关键字

一、transient关键字的作用 1、为了数据安全,避免序列化和反序列化。 解释: 当对象被序列化时,被transient关键字修饰的变量不会被序列化到目标文件; 当对象从序列化文件重构对象时(反序列化过程),被transient字段修饰的变量不会被恢复。 2、代码解释:详细解释都在注释上写着 import java.io.DataInputStream; import

wohyd的专栏 1796

static、final、transient等关键字的作用

staticstatic表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块 被static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间。 在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员。 finalfinal类不能被继承,没有子类,final

zhangfengzhang123的专栏 3336

Java关键字整理/理解

Java 的关键字及保留字java关键字的整理以及解释 java关键字整理 如图: java关键字的整理以及解释 一,native   native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。   JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java So

biuidea的博客 287
上一篇: 今天练习了一下Java GUI 编程,画了一个王八,给大家附上源码。
下一篇: 配置Nacos服务发现中心服务端时修改数据源到自定义数据库mysql时发生异常
escape-coder
博客等级 码龄8年 1粉丝 9原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值