Java 关键字transient与注解@Transient的区别用途解析

 更新时间:2025年05月27日 14:36:31   作者:XF鸭  
在Java中,transient 是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java 关键字transient与注解@Transient的区别,感兴趣的朋友一起看看吧

在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。
当一个对象被序列化时,被声明为 transient 的字段将不会被保存到序列化的结果中

主要用途:

敏感信息隐藏: transient 可以用于隐藏对象中的敏感信息,确保它们不会被持久化到存储设备或通过网络传输
临时数据: 有些字段在持久化时不需要被保存,比如缓存或临时计算的数据
注意事项:

transient 只能用于字段,不能用于类或方法
被声明为 transient 的字段在反序列化时会被设置为默认值,如 null(对于对象)、0(对于基本数据类型)或 false(对于布尔类型)
序列化过程中,transient 字段的内容不会被保存到序列化结果中
transient 只影响对象的序列化,不影响其它方面的行为,比如字段的访问权限等。

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person person = new Person("Alice", "123456");
        // 序列化对象
        FileOutputStream fileOutputStream = new FileOutputStream("序列化对象.txt");
        ObjectOutputStream out = new ObjectOutputStream(fileOutputStream);
        out.writeObject(person);
        out.close();
        // 反序列化对象
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("序列化对象.txt"));
        Person deserializedPerson = (Person) in.readObject();
        in.close();
        // 输出反序列化后的对象
        // Person{name='Alice', password='null'}
        System.out.println(deserializedPerson.toString());
    }
}

在Java的POJO中,@Transient注解的主要作用是标记某个字段不需要被持久化到数据库。具体来说:

与Java transient关键字的区别:

transient关键字是Java原生特性,用于标记字段在对象序列化时(如通过Serializable接口)应被忽略。

@Transient注解则是针对数据持久化的,仅影响ORM框架的行为,不影响序列化。

注意:JPA默认也会忽略用transient关键字修饰的字段,但显式使用@Transient注解更符合规范且可读性更强。

import javax.persistence.Entity;
import javax.persistence.Transient;
@Entity
public class User {
    private Long id;
    private String username;
    private String password;
    @Transient // 该字段不会保存到数据库
    private String confirmPassword;
    // Getters and Setters
}

总结@Transient注解在POJO中用于标识字段无需持久化到数据库,常用于临时数据或避免ORM框架的映射错误。注意区分它与Java transient关键字的不同应用场景。

到此这篇关于Java 关键字transient与注解@Transient的区别的文章就介绍到这了,更多相关java transient与注解@Transient内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解

    SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解

    这篇文章主要介绍了SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解,本文介绍的也是生产者消费者的一种实现,生产者不必是一个始终在执行的线程,它可以是一个接口,接受客户端的请求,向队列中插入消息,需要的朋友可以参考下
    2023-07-07
  • Java代理模式实例分析

    Java代理模式实例分析

    这篇文章主要介绍了Java代理模式,结合实例形式对比分析了java代理模式的使用方法与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java数组看这篇就够了

    Java数组看这篇就够了

    这篇文章主要介绍了Java数组的详细解释,是Java入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • JavaSwing GridLayout 网格布局的实现代码

    JavaSwing GridLayout 网格布局的实现代码

    这篇文章主要介绍了JavaSwing GridLayout 网格布局的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java-文件File简单实用方法(分享)

    Java-文件File简单实用方法(分享)

    下面小编就为大家带来一篇Java-文件File简单实用方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • MyBatis-Plus:saveOrUpdate根据指定字段更新或插入方式

    MyBatis-Plus:saveOrUpdate根据指定字段更新或插入方式

    这篇文章主要介绍了MyBatis-Plus:saveOrUpdate根据指定字段更新或插入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • SpringBoot配置Ollama实现本地部署DeepSeek

    SpringBoot配置Ollama实现本地部署DeepSeek

    本文主要介绍了在本地环境中使用 Ollama 配置 DeepSeek 模型,并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • java实现微信企业付款到个人功能

    java实现微信企业付款到个人功能

    这篇文章主要为大家详细介绍了java实现微信企业付款到个人功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • IDEA如何修改项目的JDK版本

    IDEA如何修改项目的JDK版本

    文章讲述了如何在IDEA中修改项目的JDK版本以解决Maven构建HibernateDemo时遇到的版本问题,Hibernate 5需要JDK 1.8,下载并安装JDK 1.8后,无需配置环境变量,而是通过IDEA的项目结构设置来更换项目JDK版本
    2024-12-12
  • 详解Spring MVC3返回JSON数据中文乱码问题解决

    详解Spring MVC3返回JSON数据中文乱码问题解决

    本篇文章主要介绍了Spring MVC3返回JSON数据中文乱码问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论