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

Det forbigående søgeord i Java

1. Introduktion

I denne artikel vil vi først forstå forbigående søgeord, og så vil vi se dets adfærd gennem eksempler.

2. Brug af transient

Lad os først forstå serialiseringen, før vi går over til forbigående som det bruges i forbindelse med serialisering.

Serialisering er processen med at konvertere et objekt til en bytestrøm, og deserialisering er det modsatte af det .

Når vi markerer en variabel som forbigående, så er den variabel ikke serialiseret . Siden forbigående felter ikke er til stede i den serialiserede form af et objekt, vil deserialiseringsprocessen bruge standardværdierne for sådanne felter, når der oprettes et objekt ud fra den serialiserede form.

Den forbigående søgeord er nyttigt i nogle få scenarier:

  • Vi kan bruge det til afledte felter
  • Det er nyttigt for felter, der ikke repræsenterer objektets tilstand
  • Vi bruger det til alle ikke-serialiserbare referencer

3. Eksempel

For at se den i aktion, lad os først oprette en bog klasse, hvis objekt vi gerne vil serialisere:

public class Book implements Serializable {
    private static final long serialVersionUID = -2936687026040726549L;
    private String bookName;
    private transient String description;
    private transient int copies;
    
    // getters and setters
}

Her har vi markeret beskrivelse og kopier som forbigående felter.

Efter at have oprettet klassen, opretter vi et objekt af denne klasse:

Book book = new Book();
book.setBookName("Java Reference");
book.setDescription("will not be saved");
book.setCopies(25);

Nu vil vi serialisere objektet til en fil:

public static void serialize(Book book) throws Exception {
    FileOutputStream file = new FileOutputStream(fileName);
    ObjectOutputStream out = new ObjectOutputStream(file);
    out.writeObject(book);
    out.close();
    file.close();
}

Lad os deserialisere objektet nu fra filen:

public static Book deserialize() throws Exception {
    FileInputStream file = new FileInputStream(fileName);
    ObjectInputStream in = new ObjectInputStream(file);
    Book book = (Book) in.readObject();
    in.close();
    file.close();
    return book;
}

Til sidst vil vi bekræfte værdierne af bogen objekt:

assertEquals("Java Reference", book.getBookName());
assertNull(book.getDescription());
assertEquals(0, book.getCopies());

Her ser vi det bognavn er blevet korrekt fastholdt. På den anden side er kopierne felt har værdien 0 og beskrivelsen er nul – standardværdierne for deres respektive datatyper – i stedet for de oprindelige værdier.

4. Adfærd med endelig

Lad os nu se et tilfælde, hvor vi bruger transient med finalen søgeord. Til det vil vi først tilføje en endelig forbigående element i vores bog klasse og opret derefter en tom bog objekt:

public class Book implements Serializable {
    // existing fields    
    
    private final transient String bookCategory = "Fiction";

    // getters and setters
}
Book book = new Book();

Den endelige modifikator gør ingen forskel – fordi feltet er forbigående , der gemmes ingen værdi for det felt. Under deserialisering, den nye bog objekt får standardværdien Fiktion som er defineret i bogen klasse, men den værdi kommer ikke fra serialiseringsdataene:

assertEquals("Fiction", book.getBookCategory());

5. Konklusion

I denne artikel så vi brugen af ​​forbigående søgeord og dets adfærd i serialisering og deserialisering.

Som altid er al koden tilgængelig på GitHub.


No
Java tag