Heim >Java >javaLernprogramm >Warum können statische Variablen nicht serialisiert werden?
Statische Mitglieder gehören zur Klassenebene und können daher nicht serialisiert werden. Dies bedeutet, dass die serialisierten Informationen dieses statische Mitgliedsfeld nicht enthalten.
Hier ist ein Beispiel, das zeigt, warum statische Variablen nicht serialisiert werden können:
Klasse Student1
package test; import java.io.Serializable; public class Student1 implements Serializable{ private static final long serialVersionUID = 1L; private String name; private transient String password; private static int count = 0; public Student1(String name,String password){ System.out.println("调用Student的带参构造方法 "); this.name = name; this.password = password; count++; } public String toString(){ return "人数:" + count + "姓名:" + name + "密码:" + password; } }
Klasse ObjectSerTest1
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ObjectSerTest1 { public static void main(String args[]){ try{ FileOutputStream fos = new FileOutputStream("test.obj"); ObjectOutputStream oos = new ObjectOutputStream(fos); Student1 s1 = new Student1("张三","123456"); Student1 s2 = new Student1("王五","56"); oos.writeObject(s1); oos.writeObject(s2); oos.close(); FileInputStream fis = new FileInputStream("test.obj"); ObjectInputStream ois = new ObjectInputStream(fis); Student1 s3 = (Student1) ois.readObject(); Student1 s4 = (Student1) ois.readObject(); System.out.println(s3); System.out.println(s4); ois.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } } }
Laufergebnis:
Student-Konstruktor mit Parametern aufrufen
Student-Konstruktor mit Parametern aufrufen
Anzahl der Personen: 2 Name: Zhang Sans Passwort: null
Anzahl der Personen: 2 Name: Wang Wu Passwort: null
Klassentest1
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Test1{ public static void main(String args[]){ try { FileInputStream fis = new FileInputStream("test.obj"); ObjectInputStream ois = new ObjectInputStream(fis); Student1 s3 = (Student1) ois.readObject(); Student1 s4 = (Student1) ois.readObject(); System.out.println(s3); System.out.println(s4); ois.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } } }
Laufergebnis:
Anzahl der Personen: 0 Name: Zhang San Passwort: null
Anzahl der Personen: 0 Name: Wang Wu Passwort: null
Zusammenfassung:
Klasse ObjectSerTest1 Das laufende Ergebnis zeigt, dass count=2 serialisiert zu sein scheint, aber das laufende Ergebnis der Klasse Test1 zeigt, dass count=0 nicht serialisiert wurde.
" Die Serialisierung speichert den Status des Objekts, und statische Variablen sind der Status der Klasse, sodass die Serialisierung keine statischen Variablen speichert.
Was hier nicht serialisiert werden kann, bedeutet, dass die Informationen nicht serialisiert werden Fügen Sie dieses statische Mitgliedsfeld
ObjectSerTest1 ein. Der Test ist erfolgreich, da sie sich alle auf demselben Computer (und demselben Prozess) befinden, da der JVM bereits die Anzahl geladen hat. Sie erhalten also die geladene Anzahl, wenn Sie übertragen es auf eine andere Maschine oder Sie fahren das Programm herunter und schreiben es neu und schreiben ein Programm zum Lesen von test.obj. Zu diesem Zeitpunkt sind die Zählinformationen der Anfangswert, da andere Maschinen oder neue Prozesse den Zähler neu laden. --- Von der Referenzwebseite
Das Ergebnis, das beim Umschreiben der Klasse Test1 beim Lesen von test.obj angezeigt wird, ist die Anfangsinformation von count, die auch den obigen Absatz überprüft.
Schließlich können statische und vorübergehend geänderte Eigenschaften von Java-Objekten nicht serialisiert werden.
Das obige ist der detaillierte Inhalt vonWarum können statische Variablen nicht serialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!