首页 Java Java基础 transient关键字的作用是什么

transient关键字的作用是什么

Dec 24, 2020 am 10:43 AM
java

transient关键字的作用是:被transient修饰的变量不参与序列化和反序列化。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

transient关键字的作用是什么

本教程操作环境:windows7系统、java10版、Dell G3电脑。

(学习视频分享:java教学视频

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。

为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。

当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

简而言之,被transient修饰的变量不参与序列化和反序列化。

接下来用代码来证明一下。

新建一个Student类实现Serializable 接口,并重写其toString方法便于观察结果。

一个age属性不被transient修饰,一个name属性被transient修饰。

public class Student implements Serializable {
    private int age;
    private transient String name;

    public Student() {
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" + "age=" + age + ", name='" + name + '\'' + '}';
    }

}

然后在TransientTest类里边测试。

PS:

为了代码简洁这里的IO操作没有进行try catch操作而是直接抛出了。

public class TestTransient {

    public static void main(String[] args) throws Exception {
        // 实例化一个Student对象.
        Student student = new Student(15, "HuaGe");
        System.out.println(student);

        // 将student对象写入磁盘文件(序列化)
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));
        oos.writeObject(student);
        oos.close();

        // 从磁盘文件读取student对象(反序列化)
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));
        student = (Student) ois.readObject();
        System.out.println(student);
    }
}

运行main方法,观察控制台打印信息。

发现经过了序列化和反序列化后,name属性从HuaGe变为了null.

这就说明了被transient修饰的变量不参与序列化和反序列化。

那有没有例外呐?

我们知道,java中有两种序列化的方式。

1. 实现Serializable接口。

2. 实现Externalizable接口。

Externalizable接口是Serializable接口的子类

源码如下

public interface Externalizable extends java.io.Serializable {
 
    void writeExternal(ObjectOutput out) throws IOException;

   
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

这个接口的两个方法可以指定对类中的哪些属性进行序列化。

使用这个接口时,无论属性有没有被transient修饰,

默认不对任何属性进行序列化。所以实现了Externalizable接口的类

一般不再使用transient修饰属性。

总结:

1. 被transient修饰的变量不参与序列化和反序列化

2. transient一般在实现了Serializable接口的类中使用。

更多编程相关知识,请访问:编程教学!!

以上是transient关键字的作用是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

文件夹在哪里找 文件夹在哪里找 Sep 20, 2025 am 07:57 AM

最直接的方法是回忆保存位置,通常在桌面、文档、下载等文件夹;若找不到,可使用系统搜索功能。文件“失踪”多因保存路径未留意、名称记忆偏差、文件被隐藏或云同步问题。高效管理建议:按项目、时间、类型分类,善用快速访问,定期清理归档,并规范命名。Windows通过文件资源管理器和任务栏搜索查找,macOS则依赖访达和聚焦搜索(Spotlight),后者更智能高效。掌握工具并养成良好习惯是关键。

如何在Java中创建文件 如何在Java中创建文件 Sep 21, 2025 am 03:54 AM

UseFile.createNewFile()tocreateafileonlyifitdoesn’texist,avoidingoverwriting;2.PreferFiles.createFile()fromNIO.2formodern,safefilecreationthatfailsifthefileexists;3.UseFileWriterorPrintWriterwhencreatingandimmediatelywritingcontent,withFileWriterover

如何在Java中的类Path中添加JAR文件? 如何在Java中的类Path中添加JAR文件? Sep 21, 2025 am 05:09 AM

使用-cp参数可将JAR加入类路径,使JVM能加载其内类与资源,如java-cplibrary.jarcom.example.Main,支持多JAR用分号或冒号分隔,也可通过CLASSPATH环境变量或MANIFEST.MF配置。

Google Chrome无法加载此页面 Google Chrome无法加载此页面 Sep 20, 2025 am 03:51 AM

首先检查网络连接是否正常,若其他网站也无法打开则问题在网络;1.清除浏览器缓存和Cookies,进入Chrome设置选择清除浏览数据;2.关闭扩展程序,可通过无痕模式测试是否因插件冲突导致;3.检查并关闭代理或VPN设置,避免网络连接被拦截;4.重置Chrome网络设置,恢复默认配置;5.更新或重装Chrome至最新版本以解决兼容性问题;6.使用其他浏览器对比测试,确认问题是否仅限Chrome;根据错误提示如ERR_CONNECTION_TIMED_OUT或ERR_SSL_PROTOCOL_ER

了解Java仿制药和通配符 了解Java仿制药和通配符 Sep 20, 2025 am 01:58 AM

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

为什么实时系统需要确定性响应保障? 为什么实时系统需要确定性响应保障? Sep 22, 2025 pm 04:03 PM

实时系统需确定性响应,因正确性依赖结果交付时间;硬实时系统要求严格截止期限,错过将致灾难,软实时则允许偶尔延迟;非确定性因素如调度、中断、缓存、内存管理等影响时序;构建方案包括选用RTOS、WCET分析、资源管理、硬件优化及严格测试。

UC浏览器如何强制缩放网页_UC浏览器网页强制缩放功能使用技巧 UC浏览器如何强制缩放网页_UC浏览器网页强制缩放功能使用技巧 Sep 24, 2025 pm 04:54 PM

首先启用UC浏览器内置缩放功能,进入设置→浏览设置→字体与排版或页面缩放,选择预设比例或自定义百分比;其次可通过双指张开或捏合手势强制调整页面显示大小;对于限制缩放的网页,可请求桌面版网站以解除限制;高级用户还可通过在地址栏执行JavaScript代码修改viewport属性,实现更灵活的强制缩放效果。

您如何处理Java的例外? 您如何处理Java的例外? Sep 23, 2025 am 04:44 AM

Java异常处理通过try-catch块捕获异常,finally块确保资源清理,try-with-resources自动管理资源,throws声明异常,自定义异常应对特定错误,并遵循捕获具体异常、不忽略异常、避免空catch块等最佳实践,从而实现健壮且可维护的代码。

See all articles