Почему в Java есть временные поля?

Прежде чем понимать ключевое transient слово transient, необходимо понять j2se концепцию сериализации. Если field читатель знает о сериализации, пропустите jdk первый пункт.

Что такое сериализация?

Сериализация java - это процесс сохранения core-java состояния объекта. Это означает, что fields состояние объекта преобразуется .java в поток байтов, который будет openjdk использоваться для сохранения java (например, хранения байтов j2se в файле) или передачи (например, отправки java-api байтов по сети). Таким же java-libraries образом мы можем использовать openjdk десериализацию, чтобы вернуть field состояние объекта из байтов. Это transient одна из важных концепций java-se программирования на Java, поскольку java-api сериализация в основном используется java в сетевом программировании. Объекты, которые java необходимо передать по сети, необходимо openjdk преобразовать в байты. Для transient этого каждый класс или интерфейс openjdk должен реализовывать интерфейс jdk Serializable. Это интерфейс маркера без java-se каких-либо методов.

Теперь, каково ключевое слово transient и его цель?

По умолчанию core-java все переменные объекта преобразуются javax в постоянное состояние. В openjdk некоторых случаях вы можете java-se захотеть избежать сохранения oraclejdk некоторых переменных, потому core-java что у вас нет необходимости jdk сохранять эти переменные. Таким java образом, вы можете объявить .java эти переменные как transient. Если openjdk переменная объявлена ​​как java transient, она не будет сохранена. Это transient основная цель ключевого слова transient transient.

Я хочу объяснить два вышеупомянутых java момента следующим примером .java (заимствованным из this article):

package javabeat.samples;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
class NameStore implements Serializable{
    private String firstName;
    private transient String middleName;
    private String lastName;

    public NameStore (String fName, String mName, String lName){
        this.firstName = fName;
        this.middleName = mName;
        this.lastName = lName;
    }

    public String toString(){
        StringBuffer sb = new StringBuffer(40);
        sb.append("First Name : ");
        sb.append(this.firstName);
        sb.append("Middle Name : ");
        sb.append(this.middleName);
        sb.append("Last Name : ");
        sb.append(this.lastName);
        return sb.toString();
    }
}

public class TransientExample{
    public static void main(String args[]) throws Exception {
        NameStore nameStore = new NameStore("Steve", "Middle","Jobs");
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("nameStore"));
        // writing to object
        o.writeObject(nameStore);
        o.close();
 
        // reading from object
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("nameStore"));
        NameStore nameStore1 = (NameStore)in.readObject();
        System.out.println(nameStore1);
    }
}

И результат oraclejdk будет следующим:

First Name : Steve
Middle Name : null
Last Name : Jobs

Отчество объявлено jre как transient, поэтому оно не будет openjdk храниться в постоянном хранилище.

java

field

transient

2022-10-31T11:05:28+00:00