La fonction du mot-clé transient est la suivante : les variables modifiées par transient ne participent pas à la sérialisation et à la désérialisation. Lorsqu'un objet est sérialisé, les valeurs des variables transitoires ne sont pas incluses dans la représentation sérialisée, alors que les variables non transitoires sont incluses.
L'environnement d'exploitation de ce tutoriel : système Windows 7, version Java 10, ordinateur Dell G3.
(Partage de vidéos d'apprentissage : vidéo d'enseignement Java)
La sérialisation de Java fournit un mécanisme pour conserver les instances d'objets. Lors de la conservation d'un objet, il peut y avoir un membre de données d'objet spécial que nous ne souhaitons pas utiliser le mécanisme de sérialisation pour enregistrer.
Afin de désactiver la sérialisation sur un champ d'un objet spécifique, vous pouvez ajouter le mot clé transient avant ce champ.
Lorsqu'un objet est sérialisé, les valeurs des variables transitoires ne sont pas incluses dans la représentation sérialisée, alors que les variables non transitoires sont incluses.
En bref, Les variables modifiées par transitoire ne participent pas à la sérialisation et à la désérialisation.
Ensuite, utilisez le code pour le prouver.
Créez une nouvelle classe Student pour implémenter l'interface Serialisable et remplacez sa méthode toString pour faciliter l'observation des résultats.
Un attribut age n'est pas modifié par transitoire, et un attribut name est modifié par transitoire.
public class Student implements Serializable { private int age; private transient String name; public Student() { } public Student(int age, String name) { this.age = age; this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } }
Ensuite, testez-le dans la classe TransientTest.
PS :
Pour la simplicité du code, l'opération IO ici n'effectue pas d'opération try catch mais est lancée directement.
public class TestTransient { public static void main(String[] args) throws Exception { // 实例化一个Student对象. Student student = new Student(15, "HuaGe"); System.out.println(student); // 将student对象写入磁盘文件(序列化) ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt")); oos.writeObject(student); oos.close(); // 从磁盘文件读取student对象(反序列化) ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt")); student = (Student) ois.readObject(); System.out.println(student); } }
Exécutez la méthode principale et observez les informations d'impression de la console.
Il a été constaté qu'après la sérialisation et la désérialisation, l'attribut name est passé de HuaGe à null.
Cela montre que est modifié par des variables transitoires ne participez pas à la sérialisation et à la désérialisation.
Y a-t-il des exceptions ?
Nous savons qu'il existe deux méthodes de sérialisation en Java.
1. Implémentez l'interface sérialisable.
2. Implémentez l'interface externalisable.
L'interface externalisable est une sous-classe de l'interface sérialisable
Le code source est le suivant
public interface Externalizable extends java.io.Serializable { void writeExternal(ObjectOutput out) throws IOException; void readExternal(ObjectInput in) throws IOException, ClassNotFoundException; }
Les deux méthodes de cette interface peuvent spécifier quels attributs de la classe sont sérialisés.
Lors de l'utilisation de cette interface, que les attributs soient modifiés par transitoire ou non,
ne sérialisera aucun attribut par défaut. Par conséquent, les classes
qui implémentent l'interface Externalisable n'utilisent généralement plus d'attributs de modification transitoire.
Résumé :
1 Les variables modifiées par transitoire ne participent pas à la sérialisation et à la désérialisation
2. Transient est généralement utilisé dans les classes qui implémentent l'interface Serialisable.
Pour plus de connaissances liées à la programmation, veuillez visiter :Enseignement de la programmation ! !
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!