transient关键字的作用是什么
transient关键字的作用是:被transient修饰的变量不参与序列化和反序列化。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
本教程操作环境:windows7系统、java10版、Dell G3电脑。
(学习视频分享:java教学视频)
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。
为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
简而言之,被transient修饰的变量不参与序列化和反序列化。
接下来用代码来证明一下。
新建一个Student类实现Serializable 接口,并重写其toString方法便于观察结果。
一个age属性不被transient修饰,一个name属性被transient修饰。
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 + '\'' + '}'; } }
然后在TransientTest类里边测试。
PS:
为了代码简洁这里的IO操作没有进行try catch操作而是直接抛出了。
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); } }
运行main方法,观察控制台打印信息。
发现经过了序列化和反序列化后,name属性从HuaGe变为了null.
这就说明了被transient修饰的变量不参与序列化和反序列化。
那有没有例外呐?
我们知道,java中有两种序列化的方式。
1. 实现Serializable接口。
2. 实现Externalizable接口。
Externalizable接口是Serializable接口的子类
源码如下
public interface Externalizable extends java.io.Serializable { void writeExternal(ObjectOutput out) throws IOException; void readExternal(ObjectInput in) throws IOException, ClassNotFoundException; }
这个接口的两个方法可以指定对类中的哪些属性进行序列化。
使用这个接口时,无论属性有没有被transient修饰,
默认不对任何属性进行序列化。所以实现了Externalizable接口的类
一般不再使用transient修饰属性。
总结:
1. 被transient修饰的变量不参与序列化和反序列化
2. transient一般在实现了Serializable接口的类中使用。
更多编程相关知识,请访问:编程教学!!
Atas ialah kandungan terperinci transient关键字的作用是什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gunakan parameter -CP untuk menambah balang ke ClassPath, supaya JVM dapat memuatkan kelas dan sumber dalamannya, seperti Java -Cplibrary.Jarcom.Example.Main, yang menyokong pelbagai balang yang dipisahkan oleh titik -titik komisul atau kolon, dan juga boleh dikonfigurasikan melalui pembolehubah persekitaran kelas atau manifest.mf.

UseFile.createenewfile () tocreateafileonlyifitdoesneteTexist, mengelakkan penulisan; 2.preferfiles.createFile () darinio.2formodern, safeFileCreationThatFailSiffileexists;

Pertama, aktifkan fungsi skala terbina dalam penyemak imbas UC, pergi ke Tetapan → Layari Tetapan → Font dan Typesetting atau Page Scaling, dan pilih nisbah pratetap atau peratusan tersuai; Kedua, anda boleh memaksa saiz paparan halaman dengan membuka atau mencubit gerak isyarat dengan dua jari; Untuk laman web yang menyekat skala, anda boleh meminta versi desktop laman web untuk membuka kunci sekatan; Pengguna lanjutan juga boleh mengubah suai atribut Viewport dengan melaksanakan kod JavaScript di bar alamat untuk mencapai kesan skala paksa yang lebih fleksibel.

Sistem masa nyata memerlukan tindak balas deterministik, kerana ketepatan bergantung pada masa penghantaran hasil; Sistem masa nyata yang sukar memerlukan tarikh akhir yang ketat, terlepas akan membawa kepada bencana, sementara masa nyata yang lembut membolehkan kelewatan sekali-sekala; Faktor-faktor yang tidak ditentukan seperti penjadualan, gangguan, cache, pengurusan memori, dan lain-lain mempengaruhi masa; Pelan pembinaan termasuk pemilihan RTO, analisis WCET, pengurusan sumber, pengoptimuman perkakasan dan ujian yang ketat.

Jawapannya ialah menggunakan thread.currentThread ().

Pengendalian pengecualian Java menangkap pengecualian melalui blok cuba, akhirnya blok memastikan pembersihan sumber, cuba-dengan-sumber secara automatik menguruskan sumber, melemparkan pengecualian, pengecualian adat untuk menangani kesilapan tertentu, dan mengikuti amalan terbaik seperti menangkap pengecualian tertentu, tidak mengabaikan pengecualian, dan mengelakkan blok tangkapan kosong, dengan itu mencapai kod yang rapi dan mengekalkan.

Edge menduduki CPU yang tinggi kerana penggunaan sumber yang tinggi berdasarkan kernel kromium, ditambah dengan faktor-faktor seperti halaman multi-tab, plug-in berjalan, skrip laman web dan mekanisme rendering; Penyelesaian termasuk: 1. Tutup sambungan yang tidak perlu untuk mengurangkan beban latar belakang; 2. Dayakan fungsi "Tag Tidur" untuk mengurangkan penggunaan sumber tag terbiar; 3. Bersihkan proses latar belakang dan tutup tetapan yang berkaitan dengan GPU; 4. Kemas kini penyemak imbas dan sistem untuk memastikan keserasian dan pengoptimuman prestasi.

Kelas pilihan digunakan untuk mengendalikan nilai -nilai yang selamat yang mungkin menjadi batal, mengelakkan pengecualian penunjuk null. 1. Buat contoh menggunakan pilihan. Nullable untuk mengendalikan nilai null. 2. Semak dan nilai akses melalui ISPRESENT atau Keselamatan IFPRESENT untuk mengelakkan panggilan langsung untuk menyebabkan pengecualian. 3. Gunakan Orelse dan Orelseget untuk memberikan nilai lalai, atau gunakan Orelsethrow untuk membuang pengecualian tersuai. 4. Menukar atau menapis nilai melalui operasi peta dan penapis rantaian untuk meningkatkan kebolehbacaan kod dan ketahanan.
