Skip to main content

Java Kurucu Metot (Constructor) Rehberi: Temeller, Türler ve En İyi Uygulamalar

Java’da kurucu metotlar (constructors), nesne oluşturulduğunda otomatik olarak çağrılan özel metotlardır.
Bu rehberde constructor kavramını, türlerini, this() ve super() kullanımlarını, ayrıca Spring ve Hibernate framework’lerinde nasıl çalıştığını öğreneceksiniz.


🎯 Bu Rehberde Ne Öğreneceksiniz?

  • Java'da kurucu metotların (constructor) temelleri
  • Varsayılan, argümansız ve parametreli kurucuların farkları
  • Kurucu metot aşırı yükleme (overloading) ve zincirleme (chaining)
  • Kopyalama (copy) ve özel (private) kurucuların kullanımı
  • Spring ve Hibernate gibi framework’lerde kurucu metot örnekleri

🧩 Kurucu Metot Nedir?

Kurucu metot (constructor), bir sınıfın örneği oluşturulurken (new) çağrılan özel bir yapıdır.
Sınıfla aynı ada sahiptir ve geri dönüş tipi bulunmaz.

public class Calisan {
public Calisan() {
System.out.println("Calisan Kurucu Metot Çalıştı");
}
}

💬 new Calisan() çalıştırıldığında bu kod otomatik çağrılır.


💡 Kurucu Metot Türleri

Java'da üç temel kurucu metot türü vardır:

1️⃣ Varsayılan Kurucu (Default Constructor)

Eğer sınıf içinde hiçbir kurucu tanımlamazsanız, Java derleyicisi otomatik olarak boş bir kurucu ekler.


public class Veri {
public static void main(String[] args) {
Veri v = new Veri(); // Derleyicinin oluşturduğu varsayılan kurucu çağrılır
}
}

💬 Varsayılan kurucu yalnızca başka kurucu tanımlanmadığında eklenir.

2️⃣ Argümansız Kurucu (No-Args Constructor)

Parametre almayan, ancak geliştirici tarafından manuel tanımlanan kurucudur.


public class Veri {
public Veri() {
System.out.println("Argümansız Kurucu Çalıştı.");
}
}

💬 Kaynak hazırlama, loglama veya bağlantı kontrolü gibi işlemler için uygundur.

3️⃣ Parametreli Kurucu (Parameterized Constructor)

Kurucuya parametre gönderilerek nesne oluşturulabilir. Bu, nesnenin başlangıç durumunu doğrudan belirler.


public class Veri {
private String ad;

public Veri(String ad) {
this.ad = ad;
System.out.println("Parametreli Kurucu Çalıştı.");
}

public static void main(String[] args) {
Veri v = new Veri("Rabisu");
System.out.println(v.ad);
}
}

💬 Parametreli kurucular, nesne alanlarını ilk anda tanımlamanızı sağlar.

⚙️ İleri Kurucu Metot Teknikleri

4️⃣ Kurucu Metot Aşırı Yükleme (Overloading)

Aynı sınıfta birden fazla kurucu tanımlayabilirsiniz. Farklı parametre kombinasyonları ile çağrıldıklarında farklı işlemler yaparlar.


public class Data {
private String ad;
private int id;

public Data() { this("Varsayılan", 0); }
public Data(String n) { this(n, 0); }
public Data(String n, int i) {
this.ad = n;
this.id = i;
}
}

💬 Bu yöntem, aynı sınıfta farklı başlatma senaryoları tanımlamaya izin verir.

5️⃣ Kurucu Metot Zincirleme (Constructor Chaining)

Bir kurucu metot içinden başka bir kurucu çağırmak için this() kullanılır. Bu çağrı mutlaka ilk satırda olmalıdır.


public class Personel {
private int id;
private String ad;

public Personel() {
this("Anonim", 999);
System.out.println("Varsayılan Personel Oluşturuldu.");
}

public Personel(String s, int i) {
this.id = i;
this.ad = s;
System.out.println("Personel Oluşturuldu.");
}
}

💬 Kod tekrarını azaltır, varsayılan değerleri tek merkezde toplar.

6️⃣ Üst Sınıf Kurucu Çağrısı (Super Constructor)

Alt sınıf, üst sınıfın kurucusunu super() ile çağırabilir. Bu çağrı da ilk satırda yer almalıdır.


public class Ogrenci extends Kisi {
private String ad;

public Ogrenci(int yas, String n) {
super(yas); // Üst sınıf kurucusunu çağır
this.ad = n;
System.out.println("Öğrenci Oluşturuldu: " + n);
}
}

💬 Alt sınıf nesnesi oluşturulurken önce üst sınıf başlatılır.


🔒 Özel Kullanımlar

Private Kurucu Metot (Singleton Deseni)

Bir sınıftan yalnızca tek bir örnek oluşturmak istiyorsanız, kurucu metodu private olarak tanımlayabilirsiniz.


public class Veritabani {
private static Veritabani instance;

private Veritabani() { }

public static Veritabani getInstance() {
if (instance == null)
instance = new Veritabani();
return instance;
}
}

💬 Bu yöntem Singleton tasarım deseninin temelidir.

Kopyalama Kurucusu (Copy Constructor)

Aynı sınıftan bir nesneyi kopyalayarak yeni bir nesne oluşturur. Derin kopyalama (deep copy) tekniğiyle nesneler birbirinden bağımsız hale gelir.


public class Fruits {
private List<String> liste;

public Fruits(Fruits fr) {
this.liste = new ArrayList<>(fr.liste);
}
}

💬 Kopyalanan nesneler birbirini etkilemez.


⚙️ Framework’lerde Constructor Kullanımı

Spring Framework

Spring, constructor injection (kurucu üzerinden bağımlılık enjeksiyonu) kullanır.


@Component
public class KullaniciServisi {
private final KullaniciDeposu depo;

@Autowired
public KullaniciServisi(KullaniciDeposu depo) {
this.depo = depo;
}
}

💬 Bu, bağımlılıkların değiştirilemez olmasını (immutability) sağlar.


🧩 Hibernate ORM

Hibernate, veritabanından nesneleri oluşturmak için argümansız kurucuya ihtiyaç duyar. Bu sayede nesneler reflection yoluyla başlatılabilir.


@Entity
public class Kullanici {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String isim;
private String eposta;

public Kullanici() { } // Hibernate için zorunlu

public Kullanici(String isim, String eposta) {
this.isim = isim;
this.eposta = eposta;
}
}

💬 Hibernate, bu kurucuyu kullanarak nesne alanlarını sonradan doldurur.


❓ Sıkça Sorulan Sorular (SSS)

  1. Kurucu metot neden geri dönüş tipi almaz?

Çünkü nesne oluşturma işlemi Java runtime tarafından otomatik yapılır, geliştiriciye düşmez.

  1. Kurucu metot ile normal metot farkı nedir?

Kurucu nesne başlatır, metot ise davranışı tanımlar. Kurucular otomatik çağrılır, metotlar manuel çağrılır.

  1. Hangi anahtar kelimeler kurucularda kullanılamaz?

abstract, final, static ve synchronized kullanılamaz.

  1. Parametreli kurucu ne zaman tercih edilir?

Nesne oluşturulurken zorunlu alanların atanmasını sağlamak istiyorsanız.

  1. Framework’ler neden argümansız kurucu ister?

Spring ve Hibernate, nesneleri reflection ile oluşturur; parametresiz kurucuya ihtiyaç duyar.


🔚 Sonuç

Kurucu metotlar, Java’da nesne yaşam döngüsünün temelidir. Doğru kullanıldığında kodun güvenilirliğini, okunabilirliğini ve performansını artırır. Aşırı yükleme, zincirleme ve dependency injection tekniklerini öğrenmek, Java projelerinde daha sürdürülebilir bir yapı kurmanı sağlar.

💡 Rabisu Bulut platformunda Java uygulamalarınızı anında test edin ve ölçeklenebilir altyapınızı şimdi oluşturun. 🚀