Menu
CoddyTech

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 berubah

Menggunakan 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 final
challenge icon

Tantangan

Mudah

Mari 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 final studentId (String): ditetapkan saat dibuat dan tidak dapat diubah
    • Field final enrollmentYear (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 setter setName() untuk nama
    • Method getInfo() yang mengembalikan: "ID: [studentId] | Name: [name] | Enrolled: [enrollmentYear]"
  • 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
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online