Pertama, mari kita bicara tentang final.
Kata kunci akhir dapat memodifikasi variabel, metode, dan kelas .
Variabel terakhir:
membutuhkan:
Saya membutuhkan konstanta waktu kompilasi yang tidak pernah berubah
2 Nilai yang diinisialisasi saat runtime, tidak ingin diubah
Manfaat: menghitung yang dieksekusi pada waktu kompilasi, mengurangi beban saat runtime
Ekstensi:
Anda dapat memodifikasi tipe dasar dan objek referensi. Saat memodifikasi tipe dasar, itu berarti nilainya cukup konstan. Saat memodifikasi referensi objek, setelah referensi diinisialisasi dan menunjuk ke suatu objek, itu tidak dapat diubah ke objek lain (objek itu sendiri dapat dimodifikasi)
Final kosong
Domain yang dimodifikasi oleh final tetapi tidak memberikan nilai awal harus diberi nilai ke final menggunakan ekspresi dalam definisi domain atau konstruktor (final harus diinisialisasi sebelum digunakan)
Melihat:
Jika suatu objek dimodifikasi dengan statis dan final pada saat yang sama (konstanta periode kompilasi), umumnya dinyatakan dalam modal, dan parameter modifikasi kata tautan bergaris bawah::
Jika parameter Modifikasi akhir, itu berarti bahwa parameter dapat dibaca tetapi tidak dapat dimodifikasi.
Contoh Penggunaan:
Private Random Rand = New Random (); private static acak acak = acak baru (); final private int n1 = 12; Nomor int private final = rand.nextint (30); private static final int number2 = random.nextInt (40); @Test public void finalDataTest () {System.out.println (n1); System.out.println ("-----------------------------------"); System.out.println (rand.nextint (30)); System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * @param SK * @return */public string finalParam (string final SK) {// sk = "jeyson"; Metode terakhir:
Final juga dapat memodifikasi metode ini, menunjukkan bahwa metode ini tidak dapat diwarisi oleh subkelas.
Manfaat menggunakan final:
1 Sebelum JDK1.5, efisiensinya lebih tinggi, dan setelah JDK1.5, dapat diabaikan
2 Metode penguncian untuk memastikan bahwa makna metode dalam subclass tetap tidak berubah dan tidak dapat ditimpa. Contoh Penggunaan:
string final publik finalMethod () {return "hello world"; } Kelas terakhir:
Jika Anda tidak ingin diwarisi oleh kelas mana pun, Anda dapat menggunakan final untuk memodifikasi contoh penggunaan kelas:
kelas akhir publik finalclasstx {private int k; public void getMyWord () {System. keluar .println ("Ini adalah kelas terakhir, nilai k adalah" +getk ()); } public int getk () {return k;} public void setk (int k) {this .k = k;}} Kemudian kata kunci sementara:
Transien hanya dapat memodifikasi variabel, menunjukkan bahwa variabel tidak dapat diserialisasi.
Secara umum, kami mewarisi kelas antarmuka yang dapat diserialisasi, dan serialisasi akan dilakukan secara otomatis. Ketika variabel yang dimodifikasi dengan transien diserialisasi, itu tidak akan diserialisasi ke tujuan yang ditentukan.
Jadi,
1 Variabel yang dimodifikasi oleh transien tidak lagi menjadi bagian dari kegigihan objek, dan konten variabel diserialisasi dan tidak dapat diakses.
2 transien hanya dapat memodifikasi variabel, bukan metode dan kelas
3 Contoh penggunaan variabel statis yang tidak dapat diserialisasi terlepas dari apakah itu dimodifikasi dengan sementara:
Public Class Transientex {public static void main (string [] args) {user user = new user (); user.setusername ("jeyson"); user.setPassword ("123456"); System.out.println ("Sebelum serialisasi:"); System.out.println ("username ="+user.getusername ()); System.out.println ("kata sandi ="+user.getPassword ()); // Serialisasi coba {ObjectOutputStream OS = ObjectOutputStream baru (FileOutputStream baru ("c: //myresource//test1.txt")); os.writeObject (pengguna); os.flush (); os.close (); } catch (Exception e) {E.PrintStackTrace (); } // deserialization coba {objekinputStream adalah = new ObjectInputStream (FileInputStream baru ("c: //myresource//test1.txt")); user = (user) is.readObject (); is.close (); System.out.println ("序列化后 :"); System.out.println ("username ="+user.getusername ()); System.out.println ("kata sandi ="+user.getPassword ()); } catch (Exception e) {E.PrintStackTrace (); } System.out.println ("--------------------------------"); }} kelas Pengguna mengimplementasikan serializable {private static final long serialversionuid = 1l; nama pengguna string pribadi; // Gunakan kata sandi string transien pribadi transien; string publik getUserName () {return username; } public void setusername (string username) {this.username = username; } public string getPassword () {return kata sandi; } public void setPassword (kata sandi string) {this.password = kata sandi; }} Ekstensi: Eksternalisasi
Kelas yang mengimplementasikan antarmuka serializable diimplementasikan, sehingga serialisasi akan secara otomatis mengimplementasikan kelas yang mengimplementasikan antarmuka Externalizble. Tidak ada yang dapat di -serial secara otomatis, dan apakah menggunakan transien atau tidak tidak berpengaruh pada hasilnya.
Jika serialisasi diperlukan, Anda perlu menentukan secara manual variabel yang akan diserialisasi dalam metode WriteExternal.
Contoh Penggunaan:
kelas publik ExternalizableEx mengimplementasikan eksternalisasi {private transient string name = "ssss"; @Override public void readExternal (objectInput in) melempar ioException, ClassNotFoundException {name = (string) in.readObject (); } @Override public void writeExternal (ObjectOutput out) melempar ioException {out.writeObject (name); } public string getName () {return name; } public void setName (name string) {this.name = name; } public static void main (string [] args) {externalizable ex = new ExternalizableEx (); Ex.setname ("Jeyson"); System.out.println ("Serialisasi Eksternalisasi:"); System.out.println (ex.getName ()); // Serialisasi coba {ObjectOutputStream OS = ObjectOutputStream baru (FileOutputStream baru (file baru ("c: //myresource//test2.txt"))); os.writeObject (ex); os.flush (); os.close (); } catch (Exception e) {E.PrintStackTrace (); } // deserialization coba {objekinputStream adalah = new ObjectInputStream (FileInputStream baru (file baru ("c: //myresource//test2.txt")))); ex = (externalizableEx) is.readObject (); is.close (); System.out.println ("Serialisasi Eksternalisasi:"); System.out.println (ex.getName ()); } catch (Exception e) {E.PrintStackTrace (); }}} penyataan:
Sebagian besar final berasal dari edisi keempat "Java Programming Thoughts"
Artikel referensi: //www.vevb.com/article/86996.htm
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.