Java >> Java tutorial >  >> Tag >> transient

Forbigående variabler i Java

I dette indlæg skal vi undersøge, hvad entransient variabel er i Java og lær at bruge dem i den rigtige sammenhæng. For at gøre det vil vi også tage et hurtigt kig på Serializable grænsefladen og dens anvendelighed.

1. Objektserialisering og "forbigående" variabler

Serialisering er en proces, hvor et Java-objekt kan skrives i en fil som en sekvens af bytes, indeholdende alle objektets data såvel som meta-data (klassenavn, metodenavne osv.). Grundlæggende kan vi serialisere et objekt og derefter deserialisere det et hvilket som helst andet sted (f.eks. en anden computer, en anden del af programmet) og være i stand til at bruge det som et standardobjekt. Serialisering i sig selv er en simpel procedure, og vi inkluderer et eksempel på det i koden, der følger.

Forbigående er et nøgleord, som vi kan bruge til en klassevariabel, hvilket betyder, at vi ikke ønsker, at denne specifikke variabel overhovedet skal holde på nogen data efter serialiseringsprocessen . Dette er ekstremt vigtigt, fordi der er scenarier, hvor vi har en stor mængde variabler, der indeholder data, som ikke behøver at blive gemt efter serialisering (måske skal vi bare gemme et par ting efter behandling, og alle relevante data har ingen bruge længere).

Dernæst skal vi vise et eksempel på, hvordan det "forbigående" søgeord påvirker data efter serialisering.

2. Serialisering med transiente variable eksempel

Vi har lavet en simpel Student-klasse, som udvider Serializable grænseflade, der indeholder to transiente klassevariabler. Vi skal serialisere og deserialisere det i det samme program, og effekten af ​​det forbigående søgeord vil blive meget tydelig.

Student.java

010203040506070809101112131415161718192021222324 import java.io.Serializable; public class Student implements Serializable {           private String name;      private int age;      private transient int semesters;      private transient String comments;           public Student(String name, int age, int semesters, String comments) {          this .name = name;          this .age = age;          this .semesters = semesters;          this .comments = comments;      }           @Override      public String toString() {          return "Name: " + name +                  ", age: " + age +                  ", semesters: " + semesters +                  ", comments: " + comments;         } }

SerializationExampleMain.java

010203040506070809101112131415161718192021222324252627282930313233334353637383294dt import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerializationExampleMain {      public static void main(String[] args) throws ClassNotFoundException {                   // Create a student and populate the fields.          Student student = new Student( "Bill" , 20 , 8 , "No comments from me!" );          System.out.println( "Before serialization:\n\t" + student.toString());                            // Serialization of the object.          try {              FileOutputStream file = new FileOutputStream( "student.ser" );              ObjectOutputStream out = new ObjectOutputStream(file);              out.writeObject(student);                          System.out.printf( "\nStudent serialized and saved.\n\n" );                          out.close();              file.close();          } catch (IOException e) {              e.printStackTrace();          }                            // Deserialization of the object.          try {              FileInputStream file = new FileInputStream( "student.ser" );              ObjectInputStream in = new ObjectInputStream(file);              Student st = (Student) in.readObject();                           System.out.println( "After serialization:\n\t" + st.toString());                           in.close();              file.close();          } catch (IOException e) {              e.printStackTrace();          }      } }

Output

1234567 Before serialization:      Name: Bill, age: 20, semesters: 8, comments: No comments from me! Student serialized and saved. After serialization:      Name: Bill, age: 20, semesters: 0, comments: null

Vær opmærksom på, at klassevariablerne i sig selv fortsætter med at eksistere, men de har ingen data knyttet til dem , så når vi forsøger at udskrive elevens oplysninger ved at bruge toString() metode, får vi ikke en undtagelse, kun de værdier, der gives til disse variable af Java. Altså en tom int antages automatisk at have en værdi på nul, mens en String har en værdi på null fordi det er en genstand.

3. Download kildekoden

Dette var et eksempel på transiente variabler i Java.Serializable transient

Java tag