🚀 BAŞTAN SONA JAVA DİLİ BÖLÜM-7: Yapıcı Metotlar (Constructors) ve Garbage Collector 🏗️

Konu Özeti

Java'da yapıcı metotlar (constructors), bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çalışan ve nesnenin durum değişkenlerine ilk değerleri atayan özel metotlardır. Parametresiz ve parametreli constructor'lar aşırı yüklenebilir; eğer hiç constructor tanımlanmazsa Java varsayılan bir constructor oluşturur. this() anahtar kelimesiyle aynı sınıftaki başka bir constructor çağrılarak zincirleme yapılabilir. Ayrıca, Garbage Collector mekanizması, Heap bellekte referansı kalmayan nesneleri otomatik olarak temizleyerek bellek sızıntılarını önler.

🚀 BAŞTAN SONA JAVA DİLİ BÖLÜM-7: Yapıcı Metotlar (Constructors) ve Garbage Collector 🏗️

Selamlar! Serimizin 7. bölümüne hoş geldiniz.

Önceki bölümde Nesne Yönelimli Programlamaya (OOP) giriş yaparak Sınıf ve Nesne kavramlarını, Stack/Heap bellek ayrımını ve `this` anahtar kelimesini incelemiştik. Bu bölümde ise nesnelerimiz doğarken ilk değerlerini atamamızı sağlayan **Yapıcı Metotları (Constructors)**, **Constructor Chaining** tekniğini ve Java'nın bellek temizleyicisi olan **Garbage Collector** yapısını öğreneceğiz.

---

📌 1. Yapıcı Metot (Constructor) Nedir? ⚙️

Constructor, bir sınıftan `new` anahtar kelimesi ile yeni bir nesne türetildiği anda **otomatik olarak çalışan** özel bir metottur.

Temel amacı, nesnenin durum değişkenlerine (fields) ilk değerlerini (initial states) atamak ve gerekli başlangıç ayarlarını yapmaktır.

### Constructor Kuralları:
1. Adı, tanımlandığı **Sınıf Adı ile BIREBIR AYNI** olmak zorundadır.
2. **Dönüş tipi YOKTUR** (`void` dahi yazılmaz!).
3. Bir sınıfta birden fazla constructor aşırı yüklenebilir (Overloading).

---

🏗️ 2. Default ve Parametreli Constructor 🛠️

Eğer sınıfınızda hiçbir constructor tanımlamazsanız, Java derleyicisi arka planda parametresiz ve içi boş bir **Default (Varsayılan) Constructor** otomatik olarak oluşturur. Ancak kendiniz bir constructor yazarsanız, default constructor iptal olur.

### Sınıf Tanımı (`Kitap.java`):

public class Kitap {
String ad;
String yazar;
int sayfaSayisi;
double fiyat;

// 1. Parametresiz Yapıcı Metot (No-Arg Constructor)
public Kitap() {
this.ad = "Bilinmeyen Kitap";
this.yazar = "Anonim";
this.sayfaSayisi = 0;
this.fiyat = 0.0;
System.out.println("Parametresiz constructor çalıştı.");
}

// 2. Parametreli Yapıcı Metot (Constructor Overloading)
public Kitap(String ad, String yazar, int sayfaSayisi, double fiyat) {
this.ad = ad;
this.yazar = yazar;
this.sayfaSayisi = sayfaSayisi;
this.fiyat = fiyat;
System.out.println("Parametreli constructor çalıştı: " + ad);
}

public void bilgileriYazdir() {
System.out.println("Kitap: " + ad + " | Yazar: " + yazar + " | Sayfa: " + sayfaSayisi + " | Fiyat: " + fiyat + " TL");
}
}

### Kullanımı (`Main.java`):

public class Main {
public static void main(String[] args) {
// Parametresiz constructor ile nesne oluşturma
Kitap k1 = new Kitap();
k1.bilgileriYazdir();

System.out.println();

// Parametreli constructor ile nesne oluşturma
Kitap k2 = new Kitap("Suç ve Ceza", "Dostoyevski", 687, 145.50);
k2.bilgileriYazdir();
}
}

---

🔗 3. `this()` İle Yapıcı Metot Zincirleme (Constructor Chaining) ⛓️

Bir constructor içinden aynı sınıftaki başka bir constructor'ı çağırmak için **`this(...)`** yapısı kullanılır.

⚠️ **Kritik Kural:** `this()` çağrısı, constructor gövdesindeki **ILK SATIRDA** yer almak ZORUNDADIR!

public class Oyuncu {
String kullaniciAdi;
int seviye;
int puan;

// Tek parametreli constructor
public Oyuncu(String kullaniciAdi) {
// Diğer 3 parametreli constructor'ı varsayılan değerlerle çağırır
this(kullaniciAdi, 1, 0);
}

// Tüm parametreleri alan ana constructor
public Oyuncu(String kullaniciAdi, int seviye, int puan) {
this.kullaniciAdi = kullaniciAdi;
this.seviye = seviye;
this.puan = puan;
}

public void profilGoster() {
System.out.println("Oyuncu: " + kullaniciAdi + " | Seviye: " + seviye + " | Puan: " + puan);
}
}

---

🧹 4. Garbage Collector (Çöp Toplayıcı) Mantığı 🧼

C++ gibi dillerde Heap bellekten tahsis edilen nesnelerin elle (`free` / `delete`) silinmesi gerekir. Aksi halde bellek sızıntıları (Memory Leak) oluşur.

Java'da ise bu işlem tamamen otomatiktir!

**Garbage Collector (GC):** JVM içinde arka planda çalışan ve Heap alanında **artık hiçbir referansı kalmayan (unreferenced)** yetim nesneleri tespit edip bellekten otomatik olarak temizleyen mekanizmadır.

public class Main {
public static void main(String[] args) {
Kitap k1 = new Kitap("1984", "George Orwell", 328, 120.0);

// k1 referansı artık başka bir nesneyi işaret ediyor!
// Eski "1984" nesnesi Heap'te referanssız kaldı.
k1 = new Kitap("Simyacı", "Paulo Coelho", 184, 95.0);

// Artık "1984" nesnesine erişilemez.
// Garbage Collector uygun bir zamanda onu bellekten siler.
}
}

---

📝 Bölüm Özeti ve Gelecek Bölüm 🔮

Bu bölümde Yapıcı Metotların çalışma felsefesini, Overloading ilkelerini, `this()` ile zincirleme constructor kullanımını ve Garbage Collector mekanizmasını öğrendik.

👉 **Bölüm 8'de Bizi Ne Bekliyor?**
• OOP'nin 4 Ana Temelinden İlki: **Encapsulation (Kapsülleme)** 🛡️
• Erişim Belirteçleri (`public`, `private`, `protected`, default)
• **Getter ve Setter** Metotları
• Salt Okun
ur (Read-Only) ve Salt Yazılır (Write-Only) Sınıflar

Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
136,499Threads
3,306,054Messages
328,352Members
scorp121Latest member
Top Bottom