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日

相关文章

  • Springboot apollo原理及使用方法详解

    SpringBootApollo原理及使用方法详解 1. 什么是SpringBootApollo SpringBootApollo是阿里巴巴开源的一款配置中心,它基于Apollo实现,并提供了SpringBoot的集成支持。使用SpringBootApollo,我们可以轻松地将Apollo配置中心集成到SpringBoot应用程序中,实现动态配置管理。 2.…

    Java 2023年5月15日
    00
  • 在JSP中使用formatNumber控制要显示的小数位数方法

    在JSP中,可以使用<fmt:formatNumber>标签来控制数字的显示格式,包括小数位数。 步骤如下: 在JSP页面中引入JSTL标签库: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@tagli…

    Java 2023年6月15日
    00
  • 一文让你了解透彻Java中的IO模型

    一文让你了解透彻Java中的IO模型 IO模型简介 在计算机中,IO模型是处理输入输出数据流的方法。在Java中,提供了多种IO模型,包括BIO、NIO、AIO。 BIO: 同步阻塞IO,采用传统的输入输出流,每一个线程并发处理一个客户端的请求。 NIO: 同步非阻塞IO,采用通道和缓冲区的概念,可以用一个线程并发处理多个客户端的请求。 AIO: 异步非阻塞…

    Java 2023年5月26日
    00
  • java实现短地址服务的方法(附代码)

    下面就是关于Java实现短地址服务的方法的详细攻略: 一、引言 随着互联网的飞速发展,短地址服务已经成为了互联网应用中不可或缺的一个环节。短地址服务可以将一个较长的URL地址转化为很短的一串字符,可以极大地缩短URL的长度,增强用户分享的便利性。那么,如何使用Java来实现短地址服务呢? 二、短地址服务的实现方式 短地址可以通过两种方式实现,一种是将长地址使…

    Java 2023年5月19日
    00
  • SpringBoot使用validation做参数校验说明

    下面是Spring Boot使用Validation做参数校验的攻略: 什么是Validation Validation是一种Java Bean Validation规范的实现,它提供了一种声明式验证的方式,可以在不依赖业务逻辑的情况下对请求参数进行校验,从而避免了代码重复和漏写校验的问题。 如何使用Validation 第一步:添加Validation依赖…

    Java 2023年5月20日
    00
  • java开发命名规范总结

    Java开发命名规范总结 在Java开发中,好的变量、方法、类的命名可以提高代码的可读性和可维护性,也是Java开发人员必须熟悉和掌握的基本规范之一。本文将介绍Java命名规范的常见规则,帮助Java开发人员合理命名。 变量命名规范 可读性为上 变量命名应该明显、具有可读性和可理解性,且要体现变量的含义和作用。一般建议使用英文单词或拼音加上数字或下划线来表示…

    Java 2023年5月26日
    00
  • Java实现ModbusTCP通信功能

    让我来详细讲解Java实现ModbusTCP通信功能的攻略。 简介 Modbus是一种通信协议,用于市场上常见的工业控制系统。这种协议使用Modbus通信协议功能码来读写数据,通常采用RS-485或RS-232串行通信。而Modbus TCP是Modbus协议的一种,它使用TCP/IP网络来实现通信。 如果你想在Java中实现ModbusTCP通信功能,你需…

    Java 2023年5月19日
    00
  • Java对象的创建过程是什么?

    Java对象的创建过程是Java程序中非常基础、也非常重要的一部分。在Java编程中开发者需要清楚理解Java对象创建的整个流程,本文将为读者详细讲解Java对象的创建过程。 Java对象的创建过程 在Java编程中,创建一个Java对象涉及到了三个步骤: 1、类的加载与加载机制 类的加载与加载机制是Java程序启动时的第一步,Java类需要在Java虚拟机…

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