Java transient 关键字是干啥的

Java中的对象被序列化时,它们的所有属性(包括私有属性)都将被保存。在某些情况下,某些属性可能不想被序列化。在这种情况下,使用Java中的transient关键字进行标记,表示该属性不应该被序列化,并且不存储在返回的字节数组中。

在Java中,transient是一个关键字,用于标记类成员变量,通常用于序列化和反序列化。

Markdown 格式

在Markdown中,transient可以通过代码块(Code Blocks)强调字体(Emphasis)来表现。

  • 代码块:
Java中,
使用 transintransient 
  • 强调字体:

使用 transient 关键字

示例1

在以下示例中,Employee对象中定义了一个私有的surname属性,但是使用了transient关键字进行标记,在序列化时该属性将不会被传送。

class Employee implements Serializable {
    private String name;
    private transient String surname;
    private int age;

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

    // 省略getter和setter方法

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                '}';
    }
}
public class TransientExample1 {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Employee employee = new Employee("John", "Doe", 28);

        System.out.println("Before Serialization: ");
        System.out.println(employee);

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("employee.ser")));
        objectOutputStream.writeObject(employee);
        objectOutputStream.close();

        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("employee.ser")));
        Employee employee1 = (Employee) objectInputStream.readObject();
        objectInputStream.close();

        System.out.println("After Deserialization: ");
        System.out.println(employee1);
    }
}

在此示例中,序列化前后,我们都可以看到surname属性的值。但是,我们在序列化过程中使用了transient关键字来标记该属性,它在序列化后并没有被保存,因此在反序列化后,该值为空。

示例2

在以下示例中,我们将使用一个普通的类变量,并且不使用transient关键字进行标记,然后我们将进行Serialization并看看它的值。

class Demo implements Serializable {
    int value = 3;
    int tempValue = 5;
}
public class TransientExample2 {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Demo demo = new Demo();

        System.out.println("Before Serialization: ");
        System.out.println(demo.value);
        System.out.println(demo.tempValue);

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("demo.ser")));
        objectOutputStream.writeObject(demo);
        objectOutputStream.close();

        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("demo.ser")));
        Demo demo1 = (Demo) objectInputStream.readObject();
        objectInputStream.close();

        System.out.println("After Deserialization: ");
        System.out.println(demo1.value);
        System.out.println(demo1.tempValue);
    }
}

此示例中,在序列化和反序列化过程中,我们都可以获得类中全部的属性值,因为我们没有标记任何属性为transient

希望这篇攻略能够解答您对transient关键字的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java transient 关键字是干啥的 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

    一、引言 在开发web应用中,我们经常会涉及到日期类型的数据,在服务器的日期格式与前端的日期格式不同的情况下,我们必须对日期进行格式化处理。本篇文章将介绍如何在SpringBoot2.0项目中整合jackson实现日期格式化和反序列化的功能。 二、依赖 在pom.xml中添加如下依赖: <dependencies> <dependency&…

    Java 2023年5月20日
    00
  • Java日常练习题,每天进步一点点(3)

    让我来详细讲解“Java日常练习题,每天进步一点点(3)”的完整攻略。 1. 理解练习题的目的和基本要求 练习题的目的是帮助Java初学者提高编程能力,掌握常用的语法和数据结构。基本要求是: 按顺序完成每一个练习; 尽可能自己编写代码,不要复制粘贴; 根据题目要求输出正确的结果; 动手实践,理解代码背后的逻辑思维。 2. 学习Java的基础知识 在进行练习之…

    Java 2023年6月15日
    00
  • java使用命令行打包JAR

    下面是详细讲解Java使用命令行打包JAR的完整攻略: 一、JAR文件的概念 JAR(Java ARchive)文件是Java平台的标准打包文件,用于将多个类文件、资源文件以及META-INF目录打包为一个文件,方便程序的分发和部署。 二、使用命令行打包JAR的步骤 以下是使用命令行打包JAR的具体步骤: 创建一个目录,将需要打包的文件复制到该目录下。 打开…

    Java 2023年5月26日
    00
  • JavaWeb 中Cookie实现记住密码的功能示例

    JavaWeb 中 Cookie 实现记住密码的功能示例攻略 概述 在 JavaWeb 开发中,Cookie 是一种非常重要的数据传输机制。它将数据存储在客户端本地,通过浏览器发送到服务器,用于实现用户登录状态保持、购物车信息保存、网站个性化推荐等功能。其中,Cookie 实现记住密码的功能是非常常见的场景。 本攻略将详细讲解如何使用 Cookie 实现 J…

    Java 2023年6月15日
    00
  • Spring Security 密码验证动态加盐的验证处理方法

    针对“Spring Security 密码验证动态加盐的验证处理方法”的完整攻略,我将分为以下几个部分进行讲解: 加盐的原理及作用 Spring Security 密码验证流程 实现动态加盐的验证处理方法 示例代码和测试 1. 加盐的原理及作用 在密码存储中,加盐是一种常用的安全策略,其原理是在密码明文前后添加一段随机的字符串(即盐),然后对整个字符串进行哈…

    Java 2023年5月20日
    00
  • Spring中的spring.factories文件用法(Spring如何加载第三方Bean)

    在Spring中,有一个特殊的配置文件spring.factories,它可以用于指定Spring加载的应用程序上下文中的第三方Bean,而无需创建XML配置文件。下面详细介绍它的用法和加载过程: spring.factories的用法 spring.factories文件位于Spring项目的META-INF目录中,并且遵循标准Java属性文件格式。该文件…

    Java 2023年5月31日
    00
  • 一个低学历者的辛酸程序路[贵在坚持]

    下面是详细讲解“一个低学历者的辛酸程序路[贵在坚持]”的完整攻略。 标题 一个低学历者的辛酸程序路[贵在坚持] 简介 本文将讲述一个低学历者的辛酸程序路,并分享如何在学历不高的情况下,通过坚持学习和实践,成为一名优秀的程序员。 正文 从自学开始 程序开发本来是需要较高的学历和技能的,但是通过自学,你也可以掌握开发技术。首先,选择一门开发语言,如Java或Py…

    Java 2023年5月26日
    00
  • Java实习打卡8道面试题

    下面是Java实习打卡8道面试题的完整攻略。 1. 如何取数组中的随机数? 可以使用Java内置的Math.random()方法来取得一个0到1之间的随机数,然后根据数组长度与所需随机数的范围进行计算即可。 int[] nums = {1, 2, 3, 4, 5}; int range = 3; // 从数组中取3个随机数 int[] randomNums …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部