Heim Java javaLernprogramm Warum können statische Variablen nicht serialisiert werden?

Warum können statische Variablen nicht serialisiert werden?

May 07, 2019 am 09:41 AM
静态变量

Statische Mitglieder gehören zur Klassenebene und können daher nicht serialisiert werden. Dies bedeutet, dass die serialisierten Informationen dieses statische Mitgliedsfeld nicht enthalten.

Warum können statische Variablen nicht serialisiert werden?

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;
     }
}
Nach dem Login kopieren

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();
         }
     }
}
Nach dem Login kopieren

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();
        }
    }    
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)