1. Modifikasi akhir
Kelas yang dimodifikasi oleh final tidak dapat diwarisi, sehingga metode anggota kelas akhir tidak dapat ditimpa, dan kelas yang dimodifikasi oleh kata kunci akhir tidak memiliki subkelas, sehingga detail implementasi kelas tidak dapat diubah dan tidak dapat diperluas. Semua metode anggota di kelas akhir akan secara implisit ditentukan sebagai metode akhir, dan variabel anggota di kelas akhir dapat diatur ke final sesuai kebutuhan.
2. Metode modifikasi akhir
Jika metode dalam kelas dimodifikasi oleh kata kunci akhir, subkelasnya tidak dapat menimpa metode dan hanya dapat diwarisi oleh subkelas. Jika metode di kelas induk tidak ingin ditimpa oleh subkelasnya, metode ini dapat didefinisikan sebagai jenis akhir. Selain itu, metode pribadi di kelas induk (mis., Metode yang dimodifikasi oleh kata kunci pribadi) tidak diizinkan ditimpa oleh subkelas. Oleh karena itu, metode yang dimodifikasi oleh kata kunci pribadi di kelas induk adalah default untuk jenis akhir. Metode yang dimodifikasi oleh kata kunci akhir memiliki karakteristik berikut:
Metode ini terkunci, mencegah kelas warisan dari memodifikasi makna dan implementasinya;
Efisien. Ketika kompiler bertemu yang memanggil metode terakhir, itu akan memasuki mekanisme tertanam, sangat meningkatkan efisiensi eksekusi;
Selain itu, metode statis yang menggunakan modifikasi akhir tidak dapat disembunyikan di subkelas kelas mereka yang menjadi milik mereka;
3. Variabel modifikasi akhir
Arti dari kata kunci final adalah "ini tak tergantikan" atau "keadaan akhir";
Jadi mengapa menghentikan perubahan?
Penemu bahasa Java dapat mencegah perubahan karena dua tujuan:
A. Masalah efisiensi:
Metode tertentu dari kelas -kelas tertentu dalam JDK tidak diizinkan ditimpa oleh pengguna. Perancang mungkin berpikir bahwa metode yang digunakan adalah metode terbaik.
Jika pengguna menutupinya secara pribadi, atau menutupinya karena kelalaian, itu akan mempengaruhi kemampuan sistem JVM atau sistem;
B. Persyaratan Desain:
Seperti yang kita semua ketahui, beberapa kasus harus menggunakan kata kunci akhir, seperti parameter lewat kelas dalam anonim dalam metode ini.
Beberapa orang mengatakan bahwa variabel akhir tidak dapat diubah setelah penugasan.
Jadi apa sebenarnya arti unchange ini?
Invarian ini mengacu pada referensi, alamat, dan konten dari objek yang direferensikan masih dapat berubah.
Dengan kata lain, variabel akhir ini selalu menunjuk pada suatu objek, adalah penunjuk yang konstan, bukan penunjuk ke konstan.
(1) tipe data dasar yang dimodifikasi oleh kata kunci akhir tidak dapat diubah setelah diinisialisasi;
(2) Jika itu adalah variabel jenis referensi, ia tidak dapat diizinkan untuk menunjuk ke objek lain setelah menginisialisasi, tetapi konten objek yang ditunjukkan oleh referensi dapat berubah. Alasannya adalah: alamat objek referensi yang disimpan dalam memori heap tipe data referensi. Setelah final memodifikasi jenis referensi, ruang memori heap yang ditunjuk oleh referensi (atau alamat memori heap yang disimpan dalam referensi) tidak dapat diubah.
Saat menggunakan final untuk memodifikasi variabel anggota non-statis dari suatu kelas, ada dua cara untuk menginisialisasi variabel anggota:
(3) Inisialisasi selama deklarasi (4) menginisialisasi ketika mendeklarasikan variabel. Variabel disebut Final Blank, yaitu, Final Blank, tetapi nilai awal harus ditetapkan untuk variabel ini di semua konstruktor kelas di mana variabel berada.
Saat menggunakan final untuk memodifikasi variabel anggota statis dari suatu kelas, ada dua cara untuk menginisialisasi variabel anggota statis:
(5) Inisialisasi saat mendeklarasikan (6) menginisialisasi dalam blok inisialisasi statis ketika final memodifikasi variabel statis antarmuka, hanya ada satu cara untuk menginisialisasi:
(7) Inisialisasi saat mendeklarasikan. Saat menggunakan final untuk memodifikasi variabel anggota lokal, Anda hanya perlu memastikan bahwa penugasan diinisialisasi sebelum digunakan.
Singkatnya, variabel yang dimodifikasi oleh kata kunci akhir tidak dapat diinisialisasi ketika dinyatakan, tetapi harus dipastikan bahwa variabel diinisialisasi sebelum digunakan. Setelah diinisialisasi dan ditugaskan, itu tidak dapat dipindahkan. Cobalah untuk menganalisis hasil output dari program:
tes kelas publik {public static void main (string [] args) {string a = "hello2"; string terakhir b = "halo"; String d = "halo"; String c = b + 2; String E = D + 2; System.out.println ((A == C)); System.out.println ((a == e)); }} 4. Parameter modifikasi akhir
Ketika parameter metode adalah tipe akhir, Anda dapat membaca dan menggunakan parameter ini, tetapi Anda tidak dapat mengubah nilai parameter. Variabel ini dibuat ketika metode ini dipanggil dan diinisialisasi ke nilai parameter yang sesuai. Nilainya tidak dapat diubah sebelum badan metode dieksekusi. Nilai parameter tipe data dasar yang dimodifikasi dengan kata kunci akhir tidak dapat diubah. Jenis data referensi yang dimodifikasi dengan kata kunci akhir tidak dapat menjadi referensi yang menunjuk ke objek lain atau menetapkan nilai untuk null lagi, tetapi konten objek referensi dapat diubah menggunakan referensi ini. Tujuan final untuk memodifikasi parameter bukan untuk mencegah operasi parameter mengubah nilai variabel yang sesuai di luar metode dalam metode yang dipanggil, tetapi untuk mencegah operasi penugasan kembali parameter dalam metode, mempengaruhi nilai awal ketika parameter dilewatkan. Selain itu, memodifikasi parameter dalam metode ini dengan kata kunci akhir tidak dapat mencegah konten nilai parameter yang dilewati dari luar metode dari diubah. Untuk detailnya, silakan merujuk ke penjelasan tipe data referensi modifikasi akhir.