Det forbigående nøkkelordet i Java

1. Introduksjon

I denne artikkelen vil vi først forstå flyktig nøkkelord, og så ser vi oppførselen gjennom eksempler.

2. Bruk av flyktig

La oss først forstå serialiseringen før vi går til flyktig slik den brukes i sammenheng med serialisering.

Serialisering er prosessen med å konvertere et objekt til en byte-strøm, og deserialisering er det motsatte av det.

Når vi merker en variabel som flyktig, da blir ikke variabelen seriell. Serien ser ikke ut til den opprinnelige verdien av variablene og lagrer standardverdiene for den datatypen.

De flyktig nøkkelord er nyttig i noen få scenarier:

  • Vi kan bruke den til avledede felt
  • Det er nyttig for felt som ikke representerer tilstanden til objektet
  • Vi bruker den til ikke-serierbare referanser

3. Eksempel

For å se det i aksjon, la oss først lage en Bok klasse hvis objekt vi vil serialisere:

public class Book implementer Serializable {private static final long serialVersionUID = -2936687026040726549L; private String bookName; privat forbigående String beskrivelse; private forbigående kopier; // getters og setters}

Her har vi merket beskrivelse og kopier som flyktig Enger.

Etter å ha laget klassen, oppretter vi et objekt av denne klassen:

Bokbok = ny bok (); book.setBookName ("Java Reference"); book.setDescription ("vil ikke bli lagret"); book.setCopies (25);

Nå skal vi serieisere objektet i en fil:

offentlig statisk tomrom seriell (bokbok) kaster Unntak {FileOutputStream-fil = ny FileOutputStream (filnavn); ObjectOutputStream ut = ny ObjectOutputStream (fil); out.writeObject (bok); ut. lukk (); file.close (); }

La oss deserialisere objektet nå fra filen:

offentlig statisk bok deserialize () kaster Unntak {FileInputStream-fil = ny FileInputStream (filnavn); ObjectInputStream in = ny ObjectInputStream (fil); Book book = (Book) in.readObject (); i. lukk (); file.close (); returbok; }

Til slutt vil vi verifisere verdiene til bok gjenstand:

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

Her ser vi det bookName har vært riktig vedvarende. På den annen side, den kopier feltet har verdi 0 og beskrivelse er null - standardverdiene for deres respektive datatyper - i stedet for de opprinnelige verdiene.

4. Atferd med endelig

La oss nå se et spesielt tilfelle der vi skal bruke flyktig med endelig nøkkelord. For det først legger vi til en endelig forbigående element i vår Bok klasse og deretter opprette en tom Bok gjenstand:

public class Book implementerer Serialiserbar {// eksisterende felt private final transient String bookCategory = "Fiction"; // getters og setters}
Bokbok = ny bok ();

Når vi verifiserer verdiene etter deserialiseringen, vil vi observere det flyktig ble ignorert for dette feltet, og den opprinnelige verdien var vedvarende:

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

5. Konklusjon

I denne artikkelen så vi bruken av flyktig nøkkelord og dets oppførsel i serialisering og deserialisering. Vi har også sett dens forskjellige oppførsel med endelig nøkkelord.

Som alltid er all koden tilgjengelig på GitHub.