Kata Kunci sementara di Java

1. Pengenalan

Dalam artikel ini, pertama-tama kita akan memahami kata kunci sementara , dan kemudian kita akan melihat tingkah lakunya melalui contoh.

2. Penggunaan sementara

Mari kita fahami serialisasi terlebih dahulu sebelum beralih ke sementara kerana ia digunakan dalam konteks serialisasi.

Serialisasi adalah proses menukar objek menjadi aliran bait, dan deserialisasi adalah kebalikannya .

Apabila kita menandakan sebarang pemboleh ubah sebagai sementara, maka pemboleh ubah tersebut tidak bersiri . Oleh itu, proses bersiri mengabaikan nilai asal pemboleh ubah dan menyimpan nilai lalai untuk jenis data tersebut.

Kata kunci sementara berguna dalam beberapa senario:

  • Kita boleh menggunakannya untuk bidang yang diturunkan
  • Ia berguna untuk medan yang tidak mewakili keadaan objek
  • Kami menggunakannya untuk sebarang rujukan yang tidak boleh diselaraskan

3. Contoh

Untuk melihatnya beraksi, pertama-tama buat kelas Buku yang objeknya ingin kami buat bersiri:

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 }

Di sini, kami telah menandakan keterangan dan salinan sebagai medan sementara .

Setelah membuat kelas, kami akan membuat objek kelas ini:

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

Sekarang, kami akan membuat siri objek ke dalam fail:

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(); }

Mari letakkan objek sekarang dari fail:

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; }

Akhirnya, kami akan mengesahkan nilai objek buku :

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

Di sini kita melihat bahawa nama buku telah dikekalkan dengan betul. Sebaliknya, bidang salinan mempunyai nilai 0 dan keterangannya adalah nol - nilai lalai untuk jenis data masing-masing - bukannya nilai asalnya.

4. Kelakuan Dengan final

Sekarang, mari kita lihat kes khas di mana kita akan menggunakan sementara dengan kata kunci terakhir . Untuk itu, pertama, kami akan menambahkan elemen sementara akhir di kelas Buku kami dan kemudian membuat objek Buku kosong :

public class Book implements Serializable { // existing fields private final transient String bookCategory = "Fiction"; // getters and setters }
Book book = new Book();

Apabila kami mengesahkan nilai selepas deserialisasi, kami akan melihat bahawa sementara tidak dihiraukan untuk bidang ini, dan nilai asalnya masih ada :

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

5. Kesimpulan

Dalam artikel ini, kami melihat penggunaan kata kunci sementara dan tingkah lakunya dalam serialisasi dan deserialisasi. Kami juga melihat kelakuannya yang berbeza dengan kata kunci terakhir .

Seperti biasa, semua kod boleh didapati di GitHub.