Terakhir:
Final memungkinkan Anda untuk mengontrol apakah anggota, metode, atau kelas Anda dapat ditimpa atau diwarisi.
Saat Anda mendefinisikan variabel dalam suatu kelas, tambahkan kata kunci akhir sebelum itu, itu berarti bahwa begitu variabel ini diinisialisasi, itu tidak dapat diubah , referensi mereka tidak dapat diubah lagi. Inisialisasi dapat berada di dua tempat, satu adalah definisinya, dan yang lainnya adalah bahwa dalam konstruktor, satu hanya dapat memilih salah satu dari keduanya.
Program berikut hanya menunjukkan penggunaan umum final:
tes kelas publik {int t = 1;
Penggunaan lain adalah untuk menentukan parameter dalam metode ini sebagai final. . Variabel parameter ini tidak akan mempengaruhi pernyataan panggilan, tetapi sangat praktis untuk variabel objek, karena variabel objek dilewatkan pada referensi mereka ketika dilewatkan, sehingga modifikasi variabel objek Anda dalam metode ini juga akan mempengaruhi pernyataan panggilan. Ketika Anda tidak perlu mengubah variabel objek sebagai parameter dalam metode ini, secara eksplisit menggunakan final dinyatakan, yang akan mencegah Anda dari memodifikasi dan mempengaruhi metode panggilan yang tidak sengaja.
Selain itu, saat menggunakan variabel parameter dalam metode di kelas dalam, variabel parameter ini harus dinyatakan final sebelum dapat digunakan, seperti yang ditunjukkan pada kode berikut:
tes kelas publik {void print (string final str) {class Innertest {Innertest () {System.out.println (str); {Test = test baru ();
Ada dua alasan mengapa metode akhir menyatakan metode ini sebagai final. Kelas diwarisi dari kelas ini., tetapi warisan masih dapat mewarisi metode ini, yang berarti dapat digunakan secara langsung. Yang kedua adalah mekanisme yang memungkinkan kompiler untuk mengonversi semua panggilan ke metode ini menjadi panggilan inline (in-line). , seperti menghemat breakpoint, menumpuk tumpukan, dll. Ini dapat meningkatkan efisiensi program Anda. Jadi Anda harus menggunakan final untuk mendefinisikan metode dengan hati -hati.
Kelas Akhir Saat Anda menggunakan final di kelas, Anda perlu berpikir dengan cermat, karena kelas akhir tidak dapat diwarisi oleh siapa pun, yang berarti bahwa kelas ini adalah kelas daun dalam pohon warisan, dan kelas ini desainnya dianggap sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna tanpa sempurna modifikasi atau ekstensi. Untuk anggota di kelas akhir, Anda dapat mendefinisikannya sebagai final atau tidak final. Untuk metode, karena kelas termasuk final, mereka secara alami menjadi final. Anda juga dapat secara eksplisit menambahkan final ke metode di kelas akhir, tetapi ini jelas tidak masuk akal.
Akhirnya:
Kata kunci akhirnya adalah tambahan terbaik untuk model penanganan pengecualian Java. Struktur akhirnya memungkinkan kode untuk selalu mengeksekusi terlepas dari apakah pengecualian terjadi. Gunakan akhirnya untuk mempertahankan keadaan internal suatu objek dan untuk membersihkan sumber daya non-memori. Tanpa akhirnya kode Anda akan membingungkan. Misalnya, kode berikut menggambarkan bagaimana Anda menulis kode untuk membebaskan sumber daya non-memori tanpa menggunakan akhirnya:
public void writeFile (string filePath, string fileName, string args) melempar ioException {fileWriter fw = fileWriter baru (filePath + filename); ();
Kode ini membuat objek FileWriter dan memanggil metode tulis. Sebelum keluar dari metode ini, Anda harus menutup objek FileWriter untuk menghindari kerentanan sumber daya. Untuk menyelesaikan tugas ini, kami menelepon dekat pada // 2, yang merupakan pernyataan terakhir dari metode ini. Tetapi apa yang terjadi jika pengecualian terjadi di blok coba? Dalam hal ini, panggilan dekat di // 2 tidak pernah terjadi. Karena itu, Anda harus menangkap pengecualian ini dan memasukkan panggilan lain untuk menutup pada // 1 sebelum menerbitkan kembali pengecualian ini. Ini memastikan bahwa objek FileWriter ditutup sebelum keluar dari metode. Menulis kode seperti ini rumit dan rentan kesalahan, tetapi akhirnya penting tanpa akhirnya. Dengan akhirnya, kode sebelumnya dapat ditulis ulang ke bentuk berikut:
public void writeFile (string filePath, string fileName, string args) melempar ioException {fileWriter fw = fileWriter baru (filePath + filename); fw .close ();
Blok akhirnya memastikan bahwa metode dekat selalu dieksekusi terlepas dari apakah pengecualian dikeluarkan dalam blok coba. Oleh karena itu, dipastikan bahwa metode dekat selalu dipanggil sebelum keluar dari metode. Dengan cara ini Anda dapat yakin bahwa objek FileWriter ditutup dan Anda belum bocor sumber daya.
menyelesaikan:
Menurut spesifikasi bahasa Java, JVM memastikan bahwa objek ini tidak dapat dijangkau sebelum memanggil fungsi finalisasi, tetapi JVM tidak menjamin bahwa fungsi ini akan dipanggil. Selain itu, spesifikasi juga memastikan bahwa fungsi finalisasi paling banyak berjalan sekali.
Secara umum, finalisasi digunakan untuk melepaskan beberapa sumber daya yang tidak mudah dikendalikan dan sangat penting, seperti beberapa operasi I/O dan koneksi data. Rilis sumber daya ini sangat penting untuk seluruh aplikasi. Dalam hal ini, programmer terutama harus mengelola sumber daya ini melalui program itu sendiri (termasuk pelepasan) dan melengkapi metode melepaskan sumber daya dengan fungsi finalisasi sebagai suplemen untuk membentuk mekanisme manajemen asuransi ganda, daripada hanya mengandalkan finalisasi untuk melepaskan sumber daya.
Meringkaskan
Final - pengubah (kata kunci) jika kelas dinyatakan final, itu berarti bahwa ia tidak dapat memperoleh subkelas baru dan tidak dapat diwarisi sebagai kelas induk. Oleh karena itu suatu kelas tidak dapat dinyatakan baik abstrak dan final. Mendeklarasikan variabel atau metode sebagai final dapat memastikan bahwa mereka tidak diubah selama penggunaan. Variabel yang dinyatakan sebagai final harus memiliki nilai awal ketika dinyatakan, dan hanya dapat dibaca di referensi mendatang dan tidak dapat dimodifikasi. Metode yang dinyatakan sebagai final juga hanya dapat digunakan dan tidak dapat kelebihan beban.
Akhirnya - blok terakhir disediakan untuk melakukan operasi kliring ketika pengecualian diproses. Jika pengecualian dilemparkan, klausa tangkapan yang cocok akan dieksekusi, dan kontrol akan memasuki blok akhirnya (jika ada).
Finalisasi - nama metode. Teknologi Java memungkinkan penggunaan metode finalisasi () untuk melakukan pekerjaan pembersihan yang diperlukan sebelum pengumpul sampah membersihkan objek dari memori. Metode ini disebut oleh pengumpul sampah ketika menentukan bahwa objek tidak dirujuk. Ini didefinisikan dalam kelas objek, jadi semua kelas mewarisi itu. Subclass mengesampingkan metode finalisasi () untuk mengatur sumber daya sistem atau melakukan pekerjaan pembersihan lainnya. Metode finalisasi () dipanggil pada objek sebelum pengumpul sampah menghapusnya.