Sobes.tech
Junior
198

Java'da hangi durumlarda final modifikatorü kullanılabilir?

AI'dan gelen yanıt

sobes.tech yapay zeka

Java'da final belirteci şu durumlara uygulanabilir:

  1. Değişkenler:

    • Yerel değişkenler: Değeri bir kez atanır ve atamadan sonra değiştirilemez.
    • Sınıf alanları: Alanın değeri ya tanımlamada ya da yapıcıda atanır ve sonra değiştirilemez.
    • Yöntem parametreleri: Yöntem içindeki parametre sabit hale gelir; yöntem gövdesinde yeniden atanamaz.

    final'ın değişkenlere uygulanması şu avantajları sağlar:

    • Değişmezlik: Değerin değişmeyeceği garantisi.
    • İş parçacığı güvenliği: Bir sınıfın final alanları, yapıcı tamamlandıktan sonra ek senkronizasyon olmadan tüm iş parçacıklarına görünür.
    • Derleyici optimizasyonları: Derleyici, değerin değişmeyeceğini bildiği için bazı optimizasyonlar yapabilir.
  2. Yöntemler:

    • final olarak bildirilen bir yöntem, alt sınıflarda geçersiz kılınamaz.
    • Bu, şu durumlar için faydalıdır:
      • İstenmeyen davranış değişikliklerini önlemek: Yöntem mantığının değişmemesini sağlar.
      • Bileşimi teşvik etmek: Kalıtım yerine bileşimi kullanmayı özendirir.
      • Derleyici optimizasyonları: Derleyici, final yöntem çağrılarını inline yapabilir.
  3. Sınıflar:

    • final olarak bildirilen bir sınıf, alt sınıf alınamaz.
    • final'ın sınıflarda kullanımı şu amaçlar içindir:
      • Değişmez (immutable) sınıflar oluşturmak: Örneğin, primitive wrapper sınıfları (Integer, String).
      • Tasarımı korumak: Sınıfın genişletilmesini engeller, böylece tutarlılık bozulmaz.
      • Güvenliği artırmak: Sınıf davranışının alt sınıflar tarafından değiştirilmesini önler.
Uygulama Açıklama Avantajlar
final alan Değer, tanımlama veya yapıcıda bir kez atanır. Değişmezlik, iş parçacığı güvenliği, optimizasyonlar.
final parametre Değer, yöntemde değiştirilemez. Açık imza, parametrenin değişmezliği garantisi.
final yöntem Alt sınıflarda geçersiz kılınamaz. Davranış değişikliğini önler, bileşimi teşvik eder, optimizasyonlar.
final sınıf Alt sınıf alınamaz (miras alınamaz). Değişmez sınıf, tasarımı koruma, güvenliği artırma.

Örnekler:

public class Example {
    // final sınıf alanı
    private final String name;

    // final primitive alan
    private final int id;

    // final, ancak liste oluşturulmadan önce farklı nesne referanslarına sahip olabilir
    // nesne oluşturulduktan sonra referans değiştirilebilir, ancak referans kendisi değiştirilemez
    private final List<String> items;

    // Derleme zamanında sabit
    public static final double PI = 3.14159;

    public Example(String name, int id) {
        this.name = name; // final alanına atama
        this.id = id;     // final alanına atama
        this.items = new ArrayList<>(); // final alanını başlatma
    }

    // final yöntem
    public final void printDetails() {
        System.out.println("Name: " + name + ", ID: " + id);
    }

    // final parametreli yöntem
    public void addItem(final String item) {
        // item = "yeni öğe"; // derleme hatası: final değişkene atama yapılamaz
        items.add(item);
    }
}

// final sınıf
// public final class ImmutableClass {
//     private final int value;
//
//     public ImmutableClass(int value) {
//         this.value = value;
//     }
//
//     public int getValue() {
//         return value;
//     }
// }

// public class SubclassOfImmutable extends ImmutableClass { // derleme hatası: final sınıftan kalıtım yapılamaz
// }
```}}}}}```