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 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 berubah

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

Tantangan

Mudah

Mari 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 final studentId (String), ditetapkan saat dibuat dan tidak dapat diubah
    • Field final enrollmentYear (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 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 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
    }
}
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