Я прочитал несколько статей о сериализации / десериализации, но все еще не могу понять, что происходит со статическими переменными во время этих процессов. здесь есть статья, и она предоставляет пример кода, который я переписываю здесь:
// Java code for serialization and deserialization
// of a Java object
import java.io.*;
class Emp implements Serializable {
private static final long serialversionUID = 129348938L;
transient int a;
static int b;
String name;
int age;
// Default constructor
public Emp(String name, int age, int a, int b)
{
this.name = name;
this.age = age;
this.a = a;
this.b = b;
}
}
public class SerialExample {
public static void printdata(Emp object1)
{
System.out.println("name = " + object1.name);
System.out.println("age = " + object1.age);
System.out.println("a = " + object1.a);
System.out.println("b = " + object1.b);
}
public static void main(String[] args)
{
Emp object = new Emp("ab", 20, 2, 1000);
String filename = "shubham.txt";
// Serialization
try {
// Saving of object in a file
FileOutputStream file = new FileOutputStream (filename);
ObjectOutputStream out = new ObjectOutputStream (file);
// Method for serialization of object
out.writeObject(object);
out.close();
file.close();
System.out.println("Object has been serialized\n"
+ "Data before Deserialization.");
printdata(object);
// value of static variable changed
object.b = 2000;
}
catch (IOException ex) {
System.out.println("IOException is caught");
}
object = null;
// Deserialization
try {
// Reading the object from a file
FileInputStream file = new FileInputStream (filename);
ObjectInputStream in = new ObjectInputStream (file);
// Method for deserialization of object
object = (Emp)in.readObject();
in.close();
file.close();
System.out.println("Object has been deserialized\n"
+ "Data after Deserialization.");
printdata(object);
// System.out.println("z = " + object1.z);
}
catch (IOException ex) {
System.out.println("IOException is caught");
}
catch (ClassNotFoundException ex) {
System.out.println("ClassNotFoundException is caught");
}
}
}
и вывод:
Object has been serialized
Data before Deserialization.
name = ab
age = 20
a = 2
b = 1000
Object has been deserialized
Data after Deserialization.
name = ab
age = 20
a = 0
b = 2000
в двух словах, мысоздали объект Emp, мы записали его в файл, затем закрыли ObjectOutputStream и FileOutputStream и ПОСЛЕ ЗАКРЫТИЯ OUTPUTSTREAMS изменили значение статической переменной b, а затем установили OBJECT = NULL ,но когда мы читаем из файла в процессе десериализации, b имеет значение, которое мы присвоили ему после записи в файл!я имею в виду, что выходные потоки были закрыты, и исходный объект также был установлен в нуль, так как может быть возможно, чтобы изменения, которые мы применяем к b, сохранялись либо в файловых, либо даже в программных полях?!