Java关键字transient理解

安捷伦示波器实战指南:从基础操作到精准触发 本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。 阅读详情

1.定义

Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

2.作用

Java中的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。transient型变量的值就不再包括在序列化的表示中。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

3.示例

定义一个类:psw变量用transient修饰

import java.io.Serializable;
class UserInfo implements Serializable {  
    private static final long serialVersionUID = 996890129747019948L;  
    private String name;  
    private transient String psw;  

    public UserInfo(String name, String psw) {  
        this.name = name;  
        this.psw = psw;  
    }  

    public String toString() {  
        return "name=" + name + ", psw=" + psw;  
    }  
}  ```
调用执行:
```java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class TestTransient {
    public static void main(String[] args) {  
        UserInfo userInfo = new UserInfo("张三", "123456");  
        System.out.println(userInfo);  
        try {  
            // 序列化,被设置为transient的属性没有被序列化  
            ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("UserInfo.txt"));  
            o.writeObject(userInfo);  
            o.close();  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
        try {  
            // 重新读取内容  
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("UserInfo.txt"));  
            UserInfo readUserInfo = (UserInfo) in.readObject();  
            //读取后psw的内容为null  
            System.out.println(readUserInfo.toString());  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }  
}

结果:
name=张三, psw=123456
name=张三, psw=null

3.1结论

1.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2.transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
对于3,加上static之后,依然能把姓名输出。这是因为:反序列化后类中static型变量name的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的。

4 应用

例如在Arraylist源码中,将Object[] elementData变量定义为transient类型:

    /**
     * The array buffer into which the elements of the ArrayList are stored.
     * The capacity of the ArrayList is the length of this array buffer. Any
     * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
     * will be expanded to DEFAULT_CAPACITY when the first element is added.
     * 存储ArrayList元素的缓存区。
     * ArrayList的容量是该数组缓存的大小。
     * 当添加第一个元素时,任何带有elementData的Arraylist在
     * elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA时,
     * 将被扩展DEFAULT_CAPACITY大小
     */
    transient Object[] elementData; // non-private to simplify nested class access
	//

这个缓冲区的容量实际上并不是ArrayList的容量,因为其实际上会预留一些空间,当空间不足时还会扩容,为减少浪费,因此在序列化时不会按照默认算法将这个成员变量写入磁盘。而是写了个writeObject方法,序列化时会调用这个方法将其持久化,在反序列化是,调用readObject,将其恢复出来。

引用
https://www.cnblogs.com/zhuyeshen/p/11543680.html
https://blog.csdn.net/u010188178/article/details/83581506

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker 微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果 阅读详情

相关推荐

OpenClaw Skill 开发全攻略|2026 最新机制 + 文件处理实操,看完直接落地开发

很多新手刚接触时,会把 Skill 想得很复杂,其实大可不必。OpenClaw 中的每个 Skill,本质就是一套“能力描述 + 执行逻辑”的组合包,简单说就是“告诉 AI 你能做什么、怎么做,它就会调用你”,核心特征可以总结为这几点,好记又实用:核心载体:以文件夹为单位,不管多简单的 Skill,文件夹里都必须有 SKILL.md 文件——这是 AI 识别技能的唯一依据,少了它,再完善的代码也没用;

haolove527的专栏 6926

Java中的transient关键字是什么意思

Java中的transient关键字是什么意思

XRT_knives的博客 1161

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 186

javatransient

transient transientjava中的关键字,变量修饰符,被 transient 修饰的变量不能被序列化。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。 什么是序列化 我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序...

Jack__iT的博客 1059

Java基础—序列化关键字transient

原文作者:老鼠只爱大米 原文地址:Javatransient关键字的详细总结 一、概要介绍 本文要介绍的是Java中的transient关键字transient是短暂的意思。对于transient 修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。 (1)序列化 Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含...

sanmi8276的博客 3226

Java中的修饰符 transient

transient关键字用于防止类的某些字段被序列化,主要用于敏感信息或不需要持久化的字段。这增强了程序的安全性和灵活性。

5-StarrySky的博客 948

剑指offer-例题 栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean I

qq_39622795的博客 893

java关键字transient_Java transient关键字理解

package test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;pu...

weixin_39988164的博客 142

Java transient关键字理解

transient [ˈtrænziənt] adj. 短暂的; 转瞬即逝的; 临时的 n 临时旅客; 瞬变现象; 候鸟; 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属...

翎野君的博客 156

理解 java volatile,transient关键字

一、volatile        一般在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存

huster14wq的博客 437

Java编程】volatile和transient关键字理解

理解volatile   volatile是java提供的一种轻量级的同步机制,所谓轻量级,是相对于synchronized(重量级锁,开销比较大)而言的。   根据java虚拟机的内存模型,我们知道其中规定了:共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存保存了被该线程使用到的主内存的副本拷贝,线程对变量的所有操作都必须在工...

weixin_30604651的博客 110

对于java关键字volatile,和transient理解

之前有看到文章写到写单例的时候最好加上关键字volatile,感兴趣的朋友可以自己去找文章。 一直对于volatile的理解浅显,直到看到一篇文章,下面将链接share出来,感兴趣的朋友可以去看看。 点击打开链接

Encode_myself的专栏 377

理解Java集合框架里面的的transient关键字

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34043301的博客 94

Java序列化(三)之transient

1、java的serialization提供了一个非常棒的存储对象状态的机制,说白了serialization就是把对象的状态存储到硬盘上去,等需要的时候就可以再把它读出来使用。但是在存储对象状态时,我们有时候会需要特定的对象数据在serialization时不进行存储。这时候 transient关键字就派上用场了。要关掉类的特定的数据域,可以使用transient关键字进行定义,这对于底层的ja...

cczakai的专栏 206

Java中的transient

1. 作用 transient关键字的主要作用就是让某些被transient关键字修饰的成员属性变量不被序列化。 2. 什么是序列化? 简单来说就是将java对象转化为字节流的形式。我们在程序中创建的JAVA对象只存在于JVM中, 当程序退出时, 这些对象也就消失了, 而序列化正是为了将这些对象保存起来以仅将来使用,也可以将已经序列化的对象传送给其他JVM来使用,这些序列化的字节流是于JVM无关的, 也就是说一个JVM序列化的对象可以在另一个JVM中反序列化。 反序列化就是将字节流转化为Java对象的过程。

qq_44515207的博客 7684

Java基础,transient关键字

Java基础,transient关键字 1、概述 Java中的transient关键字transient是短暂的意思。对于transient 修饰的成员变量,在...

倚书依杖听河流博客 664

JavaTransient关键字解释

JavaTransient关键字解释

u010697988的专栏 458

Java transient关键字使用小记

      哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始: 1. transient的作用及使用方法       我们都知道一个对象只要实现了Serilizable接口,这个对象就...

weixin_33841503的博客 801

java——什么是transient关键字

1、transient关键字 transient关键字只能修饰变量,而不能修饰方法和类。 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 2、应用场景 (1)一些安全性的信息,比如密码,一般情况下是不能离开JVM的,不能被序列化。 (2)类中的字段值可以根据其它字段推导出来,如一个长方形类有三个属性长度、宽度、面积,面积不需要序列化。 ...

weixin_42924812的博客 4154

MAPGIS6.X非本系统文件克星

处理对于MAPGIS对于非本系统文件,本工具只对工程文件中被打开或可编辑的文件进行处理,而工程文件中被关闭的文件则不对其进行处理。需注意的是,工程文件中的可编辑文件不能是当前MAPGIS正在进行编辑处理的文件。

Windographer 5.3.13

Windographer电脑版是款针对气象相关专业人员打造的风力资源及可视化工具。Windographer电脑版帮助用户快速的导入各类数据,进行分析操作,有效的识别标准偏差、风向、风速、温度、压力、相对湿度等功能数据。其还拥有自动识别测量高度的问题,还可和sql数据库进行有效的集成等。特色:1、迅捷的数据导入Windographer能够迅速并准确地导入行业内常见的几乎所有类型的数据,比如:Symphonie,Nomad,Ammonit, CampbellScientific,Triton, ASC,ZephIR,Windcube,Pentalum, AWSTruepower,3Tier,Vortex,ASOS,等等。2、细致的数据分析可深入研究切变、湍流、塔影效应,长期变化趋势,以及其他各种风况参数。另外,还能预估发电量,计算极大风速,以及与其它数据序列对比等。3、丰富的可视化通过一系列灵活分类的交互式图表,可直观地感受数据特征,并能流畅地缩放、过滤、修改和输出。显示实测数据计

上一篇: Java中Comparable与Comparator的原理及使用
下一篇: Java集合:List总结
GuoMell
博客等级 码龄11年 30粉丝 29原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值