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 berubah:
public class Circle {
private final double PI = 3.14159;
private final double radius;
public Circle(double radius) {
this.radius = radius; // Bisa diberi nilai sekali dalam konstruktor
}
public void setRadius(double r) {
// this.radius = r; // Error! Variabel final tidak bisa diberi nilai lagi
}
}Variabel final harus diinisialisasi saat deklarasi atau di konstruktor. 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 tersebut masih dapat berubah:
private final StringBuilder name = new StringBuilder("John");
// name = new StringBuilder("Jane"); // error! Tidak bisa ditetapkan ulang
name.append(" Doe"); // Oke! Isi object bisa berubahMenggunakan final pada field menyampaikan maksud dengan jelas, 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 sebuah object.
final method tidak dapat ditimpa di subkelas:
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 sama sekali tidak dapat diperluas. 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 seorang siswa terdaftar.
Kamu akan membuat dua file untuk mengatur kodemu:
Student.java: Buat class Student yang mengunci informasi tertentu secara permanen setelah ditetapkan:- Field
finalstudentId(String), ditetapkan saat dibuat dan tidak dapat diubah - Field
finalenrollmentYear(int), yaitu tahun siswa mendaftar, juga bersifat permanen - Field private biasa
name(String), dapat diperbarui jika siswa mengganti namanya - Sebuah 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 untuk menggantikan nama sebelumnya. Cetak dua baris:- Informasi siswa sebelum namanya diubah
- Informasi siswa setelah namanya 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. Data ini bersifat permanen dan 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: Cetak informasi siswa sebelum namanya diubah
// TODO: Perbarui nama siswa menggunakan setter
// TODO: Cetak 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