Почему в 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
Почему в Java есть временные поля?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.