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ı önler. Değişkenlere, metotlara ve sınıflara uygulanabilir; her birinde farklı bir etkisi vardır.
değişkene uygulandığında final onu bir sabit yapar; 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, 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.
Başvuru türleri için final, başvurunun farklı bir nesneyi gösteremeyeceği anlamına gelir; ancak nesnenin içeriği yine de 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şebilirfinal ifadesinin alanlarla birlikte kullanılması 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 nesnenin ömrü boyunca sabit kalması gereken tüm veriler için kullanışlıdır.
Bir final metot, bir 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
}Bir final sınıf 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 finalGörev
KolayÖğ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:finalbir alan olanstudentId(String) — oluşturulurken atanır ve asla değiştirilemezfinalbir alan olanenrollmentYear(int) — öğrencinin kaydolduğu yıl; bu da kalıcıdır- Normal bir özel 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 olan
getStudentId() - Kayıt yılı için bir getter olan
getEnrollmentYear() - Ad için bir getter olan
getName()ve bir setter olansetName() - Ş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ştirilmeden önceki öğrenci bilgileri
- Ad değiştirildikten 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 öğrenci bilgilerini yazdır
// TODO: Öğrencinin adını setter kullanarak güncelle
// TODO: İsim değişikliğinden sonra öğrenci bilgilerini yazdır
}
}
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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi