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日

相关文章

  • JSP 2.1和JSF 1.2规范发布预览版本

    JSP 2.1和JSF 1.2是Java Web开发中的两个重要组件,用于开发动态网页和构建用户界面。在发布预览版本之前,我们需要进行一些准备工作。 1. 准备环境 在开始使用JSP 2.1和JSF 1.2之前,我们需要确保环境已经准备好。具体来说,我们需要安装JDK 1.5或更高版本,以及一个兼容的Web服务器。 2. 下载规范 JSP 2.1和JSF 1…

    Java 2023年5月23日
    00
  • Java自动生成趋势比对数据的方法分享

    Java自动生成趋势比对数据的方法分享 在这篇文章中,我们将介绍如何使用 Java 编程语言自动生成趋势比对数据。我们将分步骤地介绍如何构建一个可以处理数据的 Java 类,以及如何使用该类生成您需要的比对数据。 步骤一:创建 Java 类 首先,您需要创建一个名为 TrendComparer 的 Java 类,该类将会处理您的数据并生成比对数据。 publ…

    Java 2023年5月26日
    00
  • Struts2学习手册之文件上传基础教程

    我们来详细讲解一下《Struts2学习手册之文件上传基础教程》的完整攻略。 一、文件上传概述 文件上传是网络应用程序的一种常见需求,它允许用户在Web页面中上传文件到服务器,如上传图片、音频、视频等资源文件。在Struts2中,文件上传是通过使用单独的拦截器来实现的,即Struts2中提供的FileUploadInterceptor拦截器。 二、文件上传详解…

    Java 2023年5月20日
    00
  • jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面

    这里是JSP+DAO+Bean+Servlet四个技术实现MVC模式的简单用户登录与注册的攻略。我们使用MySQL作为数据库。 1. 创建数据库表 首先我们需要创建两个表:用户表和用户信息表。 CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50…

    Java 2023年6月15日
    00
  • Java中如何执行多条shell/bat命令

    在Java中,可以通过调用系统命令的方式来执行shell/bat命令,可以用以下代码实现: // 写法一:Runtime.getRuntime().exec() Process process = Runtime.getRuntime().exec("command"); BufferedReader reader = new Buffe…

    Java 2023年5月26日
    00
  • Ajax二级联动菜单实现原理及代码

    一、Ajax二级联动菜单实现原理 Ajax二级联动菜单是通过Ajax技术来实现的。具体实现过程如下: 通过JavaScript监听第一级菜单的改变事件; 使用XMLHttpRequest对象向服务器发送异步请求,获取第二级菜单的数据; 解析服务器返回的数据,生成第二级菜单选项; 将第二级菜单选项插入到HTML页面中。 二、Ajax二级联动菜单代码示例 下面是…

    Java 2023年6月15日
    00
  • golang实现微信小程序商城后台系统(moshopserver)

    golang实现微信小程序商城后台系统(moshopserver)攻略 1. 介绍 golang实现微信小程序商城后台系统(moshopserver)是一个典型的企业级应用,其涉及了多种技术和框架的使用。其中,moshopserver使用golang语言开发,基于beego框架和MySQL数据库。本文将详细讲解moshopserver的实现流程与步骤。 2.…

    Java 2023年5月23日
    00
  • springboot 在linux后台运行的方法

    在Linux服务器上运行Spring Boot应用程序是一种常见的部署方式。以下是详细讲解Spring Boot在Linux后台运行的方法的完整攻略: 打包应用程序 在部署Spring Boot应用程序之前,我们需要将应用程序打包成可执行的JAR文件。我们可以使用Maven或Gradle来完成此操作。以下是使用Maven打包应用程序的示例: mvn clea…

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