ProgramlamaJava geliştirici

Java'da instance initializer (örnek başlatıcı) sözdizimi nedir, nasıl çalışır ve ne zaman kullanılmalıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Örnek başlatıcı (instance initializer) sözdizimi, bir sınıfta, yöntemler ve yapıcılar dışında, süslü parantezler içinde yer alan özel bir kod bloğudur. Bu bloğa instance initializer block denir. Yeni bir sınıf nesnesi oluşturulduğunda, bu blok, üst sınıfın yapıcısının çağrısından hemen sonra ve mevcut sınıfın yapıcısının kodu çalıştırılmadan önce her seferinde çalıştırılır.

public class Example { { // Instance initializer block System.out.println("Örnek başlatma"); } private int x; public Example(int x) { this.x = x; System.out.println("Yapıcı"); } }

Instance initializer şu amaçlar için faydalıdır:

  • Tüm yapıcılar için genel kod başlatma,
  • Ayrı bir yöntem haline getirilmesi zor olan tekrarlayan işlemleri basitleştirme,
  • Anonim veya yerel sınıfların başlatılması.

Yanlış yönlendiren soru

Eğer bir sınıfta hem instance initializer hem de bir yapıcı varsa, hangi sıralama ile çalıştırılırlar?

Cevap: Önce instance initializer çalıştırılır, ardından yapıcının kodu. Eğer sınıfta birden fazla instance initializer bloğu varsa, bunlar tanımlandıkları sırayla çalıştırılır.

Örnek:

public class Demo { { System.out.println("Instance initializer 1"); } public Demo() { System.out.println("Yapıcı"); } { System.out.println("Instance initializer 2"); } } // new Demo() çalıştırıldığında çıktı: // Instance initializer 1 // Instance initializer 2 // Yapıcı

Hikaye

Bir projede, bir geliştirici yöntemin veya yapıcının yerine instance initializer'da mantık yerleştirmişti. Sınıfın miras alınması ve yapıcının geçersiz kılınması durumunda instance initializer yine de çalıştı ve bu, beklenmedik bir başlatma sırasına ve iş mantığında hatalara yol açtı.


Hikaye

Başka bir projede, instance initializer sınıfın daha aşağıda başlatılan alanlarına erişiyordu. Değişkenlerin henüz başlatılmadığı ortaya çıktı ve nesne oluşturulurken NullPointerException hatası meydana geldi.


Hikaye

Ekip, instance initializer'a dış kaynaklarla (veritabanı) ilgili bir işlem ekledi. Bu nedenle her yapıcı çağrısı veritabanı ile bağlantı kuruyordu ve nesne gruplu oluşturulduğunda sistemi aşırı yükledi.