Menu
Coddy logo textTech

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 kelimesi değişikliği önler. Değişkenlere, metotlara ve sınıflara uygulanabilir ve her birinde farklı bir etkiye sahiptir.

Bir değişkene uygulandığında, final onu bir sabit yapar - bir kez atandığında, 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;  // Yapıcıda (constructor) bir kez atanabilir
    }
    
    public void setRadius(double r) {
        // this.radius = r;  // Hata! final değişkeni yeniden atanamaz
    }
}

final bir değişken, bildirim sırasında veya kurucuda başlatılmalıdır. Bundan sonra, onu yeniden atamaya yönelik herhangi bir girişim derleme hatasına neden olur.

Referans tipleri için final, referansın farklı bir nesneye işaret edemeyeceği, ancak nesnenin içeriğinin yine de değişebileceği anlamına gelir:

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

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

Alanlarla birlikte final kullanmak niyeti 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, ID'ler veya bir nesnenin yaşam süresi boyunca sabit kalması gereken tüm veriler için yararlıdır.

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.

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

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

Dört girdiyi şu sırayla alacaksınız: studentId (String), name (String), enrollmentYear (int) ve newName (String).

final alanlarının öğrencinin kimliğini ve kayıt yılını nasıl koruduğuna dikkat edin - 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(); // yeni satırı tüket
        String newName = scanner.nextLine();
        
        // TODO: Başlangıç değerleri ile bir Student nesnesi oluşturun
        
        // TODO: İsim değişikliğinden önceki öğrenci bilgilerini yazdırın
        
        // TODO: Setter kullanarak öğrencinin ismini güncelleyin
        
        // TODO: İsim değişikliğinden sonraki öğrenci bilgilerini yazdırın
    }
}
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