Kata Kunci final
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 13 dari 87.
Kata kunci final di Java mencegah perubahan. Kata kunci ini dapat diterapkan pada variabel, method, dan class, masing-masing dengan efek yang berbeda.
Jika diterapkan pada variabel, final menjadikannya konstanta. Setelah diberi nilai, nilainya tidak dapat diubah:
public class Circle {
private final double PI = 3.14159;
private final double radius;
public Circle(double radius) {
this.radius = radius; // Bisa diberi nilai sekali di constructor
}
public void setRadius(double r) {
// this.radius = r; // error! Tidak bisa memberi nilai baru pada variabel final
}
}Variabel final harus diinisialisasi saat deklarasi atau di constructor. Setelah itu, setiap upaya untuk menetapkan ulang nilainya akan menyebabkan error kompilasi.
Untuk tipe referensi, final berarti referensi tidak dapat menunjuk ke object yang berbeda, tetapi isi object tetap dapat berubah:
private final StringBuilder name = new StringBuilder("John");
// name = new StringBuilder("Jane"); // error! Tidak bisa diberi nilai ulang
name.append(" Doe"); // OK! Isi object bisa berubahMenggunakan final pada field menyampaikan maksud dengan jelas: hal ini memberi tahu developer lain bahwa nilai ini tidak boleh berubah setelah inisialisasi. Ini sangat berguna untuk nilai konfigurasi, ID, atau data apa pun yang harus tetap konstan selama masa hidup object.
final method tidak dapat di-override di subclass:
class Base {
public final void greet() {
System.out.println("Hi");
}
}
class Child extends Base {
// public void greet() { } // error! greet() bersifat final di Base
}class final tidak dapat diperluas sama sekali. String adalah class final, jadi tidak ada class yang dapat memperluasnya:
final class Config { }
// class MyConfig extends Config { } // error! Config bersifat finalTantangan
MudahMari buat sistem pendaftaran Student yang menggunakan kata kunci final untuk melindungi data yang tidak boleh berubah setelah siswa didaftarkan.
Kamu akan membuat dua file untuk mengatur kodemu:
Student.java: Buat class Student dengan informasi tertentu yang terkunci secara permanen setelah ditetapkan:- Field
finalstudentId(String): ditetapkan saat dibuat dan tidak dapat diubah - Field
finalenrollmentYear(int): tahun siswa mendaftar, juga bersifat permanen - Field privat biasa
name(String): dapat diperbarui jika siswa mengganti namanya - Constructor yang menerima ketiga nilai dan menginisialisasi field
- Getter
getStudentId()untuk ID siswa - Getter
getEnrollmentYear()untuk tahun pendaftaran - Getter
getName()dan settersetName()untuk nama - Method
getInfo()yang mengembalikan:"ID: [studentId] | Name: [name] | Enrolled: [enrollmentYear]"
- Field
Main.java: Buat object Student, lalu perbarui namanya dan tampilkan informasinya. Kamu akan menerima empat input: ID siswa, nama awal, tahun pendaftaran, dan nama baru yang akan digunakan. Cetak dua baris:- Informasi siswa sebelum nama diubah
- Informasi siswa setelah nama diubah
Kamu akan menerima empat input secara berurutan: studentId (String), name (String), enrollmentYear (int), dan newName (String).
Perhatikan bagaimana field final melindungi ID siswa dan tahun pendaftaran. Keduanya adalah catatan permanen yang tidak boleh berubah, sedangkan nama dapat diperbarui melalui setter-nya.
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int enrollmentYear = scanner.nextInt();
scanner.nextLine(); // lewati karakter baris baru
String newName = scanner.nextLine();
// TODO: Buat object Student dengan nilai awal
// TODO: Tampilkan informasi siswa sebelum namanya diubah
// TODO: Perbarui nama siswa menggunakan setter
// TODO: Tampilkan informasi siswa setelah namanya diubah
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online