Java Constructor (Yapıcı Metot) Nedir? Kuralları ve Örnekleri
Constructor (Yapıcı Metot), Java'da bir sınıftan new anahtar kelimesi ile nesne oluşturulduğu anda otomatik olarak tetiklenen özel bir yapıdır. Constructor'ların temel amacı, yeni oluşturulan nesnenin başlangıç değerlerini (değişken atamalarını) yapmaktır. Sınıf ile birebir aynı isme sahip olmalı ve kesinlikle bir geri dönüş tipi (void dahil) barındırmamalıdır.
Nesne Yönelimli Programlamanın (OOP) kalbinde sınıflar (class) ve nesneler (object) yatar. Bir nesneyi bellekte (Heap) var ettiğiniz ilk milisaniyede çalışan koda ise Constructor (Yapıcı Metot) denir.
1. Java Constructor Nedir?
Java’da new anahtar kelimesiyle bir nesne yarattığınızda, sınıfa ait constructor perde arkasında otomatik olarak çalışır. Siz özel olarak bir constructor yazmasanız bile, Java derleyicisi (Compiler) kodunuza görünmez bir Varsayılan (Default) Constructor ekler.
2. Constructor ile Metot Arasındaki Farklar
Yapıcı metotlar isim olarak normal metotlara benzese de davranış olarak tamamen farklıdır:
- Geri Dönüş Tipi Yoktur: Normal metotlarda
void,int,Stringvb. dönüş tipleri vardır, constructor'da kesinlikle olmaz. - İsimlendirme: Constructor ismi her zaman sınıf adıyla birebir aynı olmak zorundadır. (Büyük/küçük harf duyarlıdır).
- Tetiklenme: Normal metotları siz çağırırsınız (Örn:
nesne.calis()). Constructor isenewdendiği an bir kez otomatik çalışır.
3. Parametreli ve Parametresiz Constructor
Sınıfınız yaratılırken dışarıdan veri isteyebilir (Parametreli) veya varsayılan değerlerle (Parametresiz) doğabilir.
class Personel {
String isim;
int yas;
// Parametreli Constructor
Personel(String isim, int yas) {
this.isim = isim;
this.yas = yas;
}
}
// HATA! Parametresiz constructor silindi.
Personel p1 = new Personel();
// Doğru Kullanım:
Personel p2 = new Personel("Ali", 30);
4. Constructor’ların Çalışma Sırası (Kalıtım / Inheritance)
Java’da kalıtım (extends) varsa, constructor’lar zincirleme çalışır. Bir nesne yaratıldığında her zaman en üstteki ata sınıftan (Parent/Super class) başlanarak aşağıya doğru bir yapılandırma dizisi izlenir.
class A {
A() { System.out.println("A Constructor"); }
}
class B extends A {
B() { System.out.println("B Constructor"); }
}
// new B(); çalıştırıldığında çıktı:
// A Constructor
// B Constructor
5. Kesin Java Constructor Kuralları
- Geri dönüş tipi olamaz (
voidbile yazılamaz). - İsim, bulunduğu sınıf ismiyle birebir aynı olmalıdır.
- İlk satırında gizli veya açık şekilde
super()(üst sınıfı çağırma) veyathis()(aynı sınıftaki diğer constructor'ı çağırma) barındırır. - Constructor override edilemez (ezilemez). Ancak parametreler değiştirilerek overload edilebilir (aşırı yüklenebilir).
- Interface'lerin (Arayüzlerin) constructor'ı yoktur çünkü onlardan nesne üretilemez.
6. Yanlış ve Doğru Kullanım Örnekleri
Yanlış Kullanım (En Sık Yapılan Hata)
class Araba {
// Başına void yazdığınız an bu bir Constructor DEĞİLDİR!
// Sıradan, kötü isimlendirilmiş bir metot haline gelir.
void Araba() {
System.out.println("Ben bir metodum.");
}
}
Doğru Kullanım
class Araba {
// Doğru Constructor (Void yok, sınıf adıyla aynı)
Araba() {
System.out.println("Araba nesnesi üretildi.");
}
}
7. Default Constructor Ne Zaman Oluşur?
Eğer sınıfınızın içine hiçbir constructor yazmazsanız, Java arka planda sizin için içi boş, parametresiz bir constructor yaratır. Buna Default Constructor denir. Ancak sınıfınıza kendiniz herhangi bir constructor (ister parametreli, ister parametresiz) eklerseniz, Java bu jesti yapmayı bırakır.
8. Kalıtımda super() Kullanımı
Eğer miras aldığınız üst sınıfın (Parent) constructor'ı dışarıdan parametre bekliyorsa, alt sınıfın constructor'ı içinde super(...) komutunu kullanarak o parametreyi zorunlu olarak yukarıya göndermelisiniz.
class Canli {
Canli(String isim) { }
}
class Insan extends Canli {
Insan() {
// Üst sınıf parametre istediği için bu satır zorunludur!
super("Ali");
}
}
9. Sık Sorulan Sorular (SSS)
Constructor içinde "return" kullanılabilir mi?
Evet, kullanılabilir. Ancak constructor bir değer döndüremeyeceği için yalnızca nesne yaratımını erken sonlandırmak (break mantığı) amacıyla içi boş bir return; ifadesi yazılabilir.
Constructor Overloading (Aşırı Yükleme) ne demektir?
Bir sınıf içerisinde, parametre tipleri veya parametre sayıları farklı olmak şartıyla birden fazla constructor yazabilme işlemidir. (Örn: Hem boş bir Personel(), hem de isim ve yaş alan bir Personel(String, int) constructor'ı yazmak).
Sonuç
Bu rehberde, Java'da nesnelerin varoluş noktası olan Constructor (Yapıcı Metot) kavramını tüm detaylarıyla inceledik. Özellikle Spring Boot gibi framework'lerde sıkça kullanılan "Constructor Injection" (Bağımlılık Enjeksiyonu) mimarisini anlamak için, yapıcı metotların kurallarını ve çalışma sıralarını kusursuz bilmek şarttır.