crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Static: Bellekte Tek, Sınıfa Ait
1. Static Değişkenler (Class Variables)
Normal bir değişken her yeni nesne oluşturulduğunda (new) bellekte yeniden yaratılır. Ancak static bir değişken, sınıf belleğe yüklendiği anda bir kez oluşturulur.
Paylaşılan Veri: Tüm nesneler aynı static değişkeni görür. Bir nesne onu değiştirirse, diğerleri de güncellenmiş halini görür.
Bellek Dostu: Nesne sayısından bağımsız olarak bellekte sadece bir yer kaplar.
Java:
class Oyuncu {
String isim; // Her oyuncunun ismi farklıdır (Instance variable)
static int oyuncuSayisi = 0; // Toplam sayı tektir ve paylaşılır (Static variable)
Oyuncu(String isim) {
this.isim = isim;
oyuncuSayisi++; // Her yeni nesne oluşturulduğunda ortak sayacı artırır
}
}
2. Static Metotlar
static metotlar, bir nesne oluşturmaya gerek kalmadan SınıfAdı.metotAdı() şeklinde çağrılabilirler.
Kısıtlama: Static metotlar, nesneye özgü (non-static) değişkenlere veya metotlara doğrudan erişemezler. Çünkü ortada henüz bir nesne olmayabilir.
Erişim: Sadece diğer static üyeleri kullanabilirler.
Java:
public class Matematik {
public static int topla(int a, int b) {
return a + b;
}
}
// Kullanım: nesne oluşturmaya gerek yok!
int sonuc = Matematik.topla(5, 10);
3. Ne Zaman Static Kullanmalıyız?
A. Yardımcı (Utility) Sınıflar İçin
Eğer bir metot sadece girdi alıp çıktı üretiyorsa ve nesnenin iç durumuna (state) ihtiyaç duymuyorsa static olmalıdır. (Örn: Math.sqrt(), Arrays.sort()).B. Sabit Değerler İçin
Uygulama genelinde değişmeyecek değerleri static final (sabit) olarak tanımlarız.public static final double PI = 3.14159;
C. Sayaçlar ve Global Ayarlar İçin
Kaç nesne üretildiğini takip etmek veya tüm nesnelerin uyması gereken tek bir ayarı (Örn: database_url) saklamak için kullanılır.4. Static vs Instance (Nesne) Karşılaştırması
| Özellik | Static (Sınıf) | Instance (Nesne) |
|---|---|---|
| Erişim Yolu | Sınıf ismiyle (Matematik.topla) | Nesne ismiyle (m.topla) |
| Bellek Alanı | Method Area (Tek seferlik) | Heap (Her nesne için ayrı) |
| this Kullanımı | Kullanılamaz (this nesneyi temsil eder) | Kullanılabilir |
| Yaşam Süresi | Program başlayınca doğar, bitince ölür. | Nesne oluşunca doğar, GC silince ölür. |
Sonuç
static anahtar kelimesi, belleği verimli kullanmamızı sağlar ancak aşırı kullanımı "Nesne Yönelimli" mantıktan uzaklaşıp "Prosedürel" koda kaymamıza neden olabilir. Bir şeyi static yapmadan önce kendinize şu soruyu sorun: "Bu özellik nesneden nesneye değişiyor mu?". Cevap hayır ise, static doğru tercihtir.