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:
-
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
finalalanları, 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.
-
Yöntemler:
finalolarak 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,
finalyöntem çağrılarını inline yapabilir.
-
Sınıflar:
finalolarak 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
// }
```}}}}}```