Menu
CoddyTech

final Anahtar Kelimesi

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 87.

Java'daki final anahtar sözcüğü değişiklik yapılmasını engeller. Değişkenlere, metotlara ve sınıflara uygulanabilir; her birinde farklı bir etkisi vardır.

Bir değişkene uygulandığında, final onu bir sabit hâline getirir - bir kez atandıktan sonra değeri değiştirilemez:

public class Circle {
    private final double PI = 3.14159;
    private final double radius;
    
    public Circle(double radius) {
        this.radius = radius;  // constructor içinde bir kez değer atanabilir
    }
    
    public void setRadius(double r) {
        // this.radius = r;  // Hata! final değişkene yeniden değer atanamaz
    }
}

final değişkeni, tanımlandığı yerde veya kurucuda başlatılmalıdır. Bundan sonra onu yeniden atamaya yönelik her girişim derleme hatasına neden olur.

başvuru türleri için final, başvurunun farklı bir nesneyi gösteremeyeceği anlamına gelir; ancak nesnenin içeriği değişebilir:

private final StringBuilder name = new StringBuilder("John");

// name = new StringBuilder("Jane");  // Hata! Yeniden atama yapılamaz
name.append(" Doe");  // Tamam! Nesnenin içeriği değişebilir

Alanlarla final kullanmak, amacı açıkça belirtir; diğer geliştiricilere bu değerin başlatıldıktan sonra asla değişmemesi gerektiğini söyler. Bu, özellikle yapılandırma değerleri, kimlikler veya bir nesnenin ömrü boyunca sabit kalması gereken tüm veriler için kullanışlıdır.

final bir metot alt sınıfta geçersiz kılınamaz:

class Base {
    public final void greet() {
        System.out.println("Hi");
    }
}
class Child extends Base {
    // public void greet() { }  // Hata! greet(), Base içinde final olarak tanımlanmıştır
}

final bir class hiçbir şekilde genişletilemez. String bir final sınıftır, bu nedenle hiçbir sınıf onu genişletemez:

final class Config { }
// class MyConfig extends Config { }  // Hata! Config final
challenge icon

Görev

Kolay

Bir öğrenci kaydedildikten sonra asla değişmemesi gereken verileri korumak için final anahtar sözcüğünü kullanan bir Student kayıt sistemi oluşturalım.

Kodunu düzenlemek için iki dosya oluşturacaksın:

  • Student.java: Ayarlandıktan sonra bazı bilgilerin kalıcı olarak kilitlendiği bir Student sınıfı oluştur:
    • Bir final alanı studentId (String) — oluşturulurken atanır ve asla değiştirilemez
    • Bir final alanı enrollmentYear (int) — öğrencinin kaydolduğu yıl; bu da kalıcıdır
    • Normal bir private alan olan name (String) — öğrenci adını değiştirirse güncellenebilir
    • Üç değerin tümünü alan ve alanları başlatan bir kurucu
    • Öğrenci numarası için bir getter getStudentId()
    • Kayıt yılı için bir getter getEnrollmentYear()
    • Ad için bir getter getName() ve setter setName()
    • Şunu döndüren bir getInfo() metodu: "ID: [studentId] | Name: [name] | Enrolled: [enrollmentYear]"
  • Main.java: Bir Student nesnesi oluştur, ardından adını güncelle ve bilgilerini görüntüle. Dört girdi alacaksın: öğrenci numarası, ilk ad, kayıt yılı ve güncellenecek yeni ad. İki satır yazdır:
    • Ad değişikliğinden önceki öğrenci bilgileri
    • Ad değişikliğinden sonraki öğrenci bilgileri

Sırasıyla dört girdi alacaksın: studentId (String), name (String), enrollmentYear (int) ve newName (String).

final alanlarının öğrencinin numarasını ve kayıt yılını nasıl koruduğuna dikkat et: bunlar değişmemesi gereken kalıcı kayıtlardır; ad ise setter'ı aracılığıyla güncellenebilir.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int enrollmentYear = scanner.nextInt();
        scanner.nextLine(); // satır sonu karakterini tüket
        String newName = scanner.nextLine();
        
        // TODO: Başlangıç değerleriyle bir Student nesnesi oluştur
        
        // TODO: İsim değişikliğinden önce öğrencinin bilgilerini yazdır
        
        // TODO: setter kullanarak öğrencinin adını güncelle
        
        // TODO: İsim değişikliğinden sonra öğrencinin bilgilerini yazdır
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi