Les membres statiques appartiennent au niveau classe, ils ne peuvent donc pas être sérialisés. Ce qui ne peut pas être sérialisé ici signifie que les informations sérialisées ne contiennent pas ce champ de membre statique
<.>Voici un exemple qui montre pourquoi les variables statiques ne peuvent pas être sérialisées :
Class 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; } }
Class 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(); } } }
Test de classe 1
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(); } } }
Résumé :
Class ObjectSerTest1 Le résultat en cours d'exécution montre que count=2, qui semble être sérialisé, mais le résultat en cours d'exécution de la classe Test1 montre que count=0 n'a pas été sérialisé. " La sérialisation enregistre l'état de l'objet, et les variables statiques sont l'état de la classe, donc la sérialisation n'enregistre pas les variables statiques. Ce qui ne peut pas être sérialisé ici signifie la sérialisation. Les informations ne le sont pas. incluez ce champ de membre statique ObjectSerTest1. Le test est réussi car ils sont tous sur la même machine (et le même processus), car la jvm a déjà chargé le nombre, donc ce que vous obtenez est le nombre chargé, si vous le transférez sur une autre machine ou vous fermez le programme et le réécrivez et écrivez un programme pour lire test.obj, à ce moment-là, parce que d'autres machines ou de nouveaux processus rechargent le décompte, les informations de décompte sont la valeur initiale "---. -- Depuis la page Web de référence Le résultat affiché par la classe de réécriture Test1 lors de la lecture de test.obj est l'information initiale de count, qui vérifie également le paragraphe ci-dessus. Enfin, les propriétés modifiées statiques et transitoires des objets Java ne peuvent pas être sérialisées.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!