Java’da static blok, sınıf ilk kez başlatılırken çalışır. Kurucu metottan farklı olarak belirli bir nesnenin oluşturulmasını beklemez; sınıf düzeyindeki başlangıç işlemlerini yürütür. Bu nedenle birkaç adımda hazırlanacak static alanları veya sınıfın kullanıma hazır hâle gelmesi için gereken kısa işlemleri tek yerde toplamak amacıyla kullanılır.
Java’da static blok ne zaman çalışır?
Bir static blok, sınıfın başlatılması sırasında çalışır. Bu başlatma, sınıftan ilk nesne oluşturulmadan hemen önce gerçekleşebileceği gibi, sınıfa ait bir static metodun çağrılması, bir static alana değer atanması veya sabit olmayan bir static alanın okunmasıyla da tetiklenebilir. Bu yüzden static bloğun çalışması için mutlaka new ifadesinin kullanılması gerekmez.
Static blok nesne başına değil, sınıfın ilk başlatılması sırasında çalışır.
Kurucu metot, bir sınıf örneği oluşturma sürecinin parçasıdır ve oluşturulan nesnenin başlangıcına hizmet eder. Aynı sınıftan birden fazla nesne üretildiğinde kurucu her nesne için yeniden devreye girebilir. Static blok ise sınıfın başlatılması tamamlandıktan sonra sonraki nesne oluşturma işlemlerinde yeniden çalışmaz. Böylece kurucu nesneye, static blok sınıfa ait başlangıç işini temsil eder.
Bu ayrımı öğrendikten sonra temel Java kavramlarını yoklamak için Java bilgi testi sayfasındaki soruları çözebilirsin.
Static blok sözdizimi ve neden kullanılır?

Java’da static blok, sınıf gövdesi içinde yazılan bir static initializer yapısıdır. Sözdizimi static { ... } biçimindedir. Bir adı, parametre listesi veya dönüş türü olmadığı için metot gibi çağrılmaz; sınıf başlatılırken değerlendirilir.
class Ayarlar {
static String etiket;
static {
String temel = "Java";
etiket = temel + " ayarları hazır";
}
}
Bu örnekte etiket adlı static alan, önce yerel bir değer hazırlanıp ardından birleştirme yapılarak atanıyor. Koşul, dönüşüm veya birkaç atama gibi küçük başlangıç adımlarını sınıf düzeyinde tek bir yerde toplamak static bloğun temel kullanım alanıdır.
Tek bir değer doğrudan verilebiliyorsa static String etiket = "Java ayarları hazır"; gibi bir alan başlatıcısı daha sade olabilir. Static blok, başlangıç işi birkaç adıma ayrıldığında anlamlı bir seçenek hâline gelir; her static alan için otomatik olarak tercih edilmesi gerekmez. Bir sınıfta static alan başlatıcıları ve static bloklar birden fazla bulunuyorsa bunlar kaynak metindeki sıraları izleyerek değerlendirilir. Bu nedenle bir başlangıç adımının önceki alanda veya blokta hazırlanan bir değere dayanması durumunda yazılış sırası önem taşır.
Bu yapıyı kendi kodun üzerinde adım adım çalışmak ve Java konularında kişiye özel ilerlemek istersen Java özel ders seçeneğini inceleyebilirsin.
Çalışma sırasını tek bir Java programıyla izleyelim

Static blok sınıfın ilk kez başlatılması sırasında çalışır; kurucu metot ise new ile oluşturulan her nesne için çağrılır. Static blok nesne başına değil, sınıfın ilk başlatılması sırasında çalışır. Bu örnekte giriş sınıfının iki static bloğu, kaynak kodunda tanımlandıkları sırayla yürütülür ve bu aşama tamamlanmadan main çağrılmaz.
Çalışan program:
public class StaticBlokOrnegi {
static {
System.out.println("1. static blok");
}
static {
System.out.println("2. static blok");
}
public static void main(String[] args) {
System.out.println("main başladı");
StaticBlokOrnegi nesne = new StaticBlokOrnegi();
nesne.yazdir();
}
public StaticBlokOrnegi() {
System.out.println("Kurucu çalıştı");
}
public void yazdir() {
System.out.println("Normal metot çalıştı");
}
}
Beklenen konsol çıktısı:
1. static blok
2. static blok
main başladı
Kurucu çalıştı
Normal metot çalıştı
Akışı beş adımda okuyalım:
- Birinci static blok: Sınıf başlatılırken ilk tanımlanan blok çalışır ve
1. static blokmesajını yazar. - İkinci static blok: İlk blok tamamlanınca ikinci blok çalışır. Birden fazla static blokta kaynak kodundaki tanım sırası korunur.
main: İki static blok tamamlandıktan sonra giriş metodu başlar vemain başladımesajını üretir.newile kurucu:new StaticBlokOrnegi()yeni bir nesne oluşturur ve parametresiz kurucuyu çağırır. Bu nedenleKurucu çalıştısatırı gelir.- Nesne referansı üzerinden normal metot:
nesne.yazdir()çağrısı, oluşturulan nesneye bağlı normal instance metodunu çalıştırır ve son mesajı yazdırır.
Sınır notu: Bu sınıfın başlatması tamamlandıktan sonra, aynı çalışma bağlamında yapılan sonraki new işlemlerinde static bloklar nesne başına yeniden çalışmaz. Kurucu ise her new işleminde yeniden çağrılır.
Static blok instance alan ve metotlara neden doğrudan erişemez?
Static blok, belirli bir nesnenin bağlamında değil, bir static context içinde çalışır. Bu nedenle örtük this yoktur; this anahtar sözcüğü kullanılamaz ve deger ile yazdir() gibi instance üyeler yalın adlarıyla doğrudan kullanılamaz. Static alan ve metotlar, erişim kuralları izin verdiği sürece sınıf bağlamında kullanılabilir. Bir Ornek nesnesini gösteren nesne referansı varsa, nesne.deger ve nesne.yazdir() nitelikli erişimlerdir. Noktanın solundaki nesne, erişimin hangi nesneye ait olduğunu belirtir.
Static blok içinde uygun bir kurucusu olan Ornek sınıfından new Ornek() ile nesne oluşturup üyelerine erişmek mümkündür. Ancak bu işlem kurucuyu çalıştırır; kurucunun yaptığı işlemler ve olası yan etkiler sınıf başlatma aşamasında gerçekleşebilir. Bu nedenle böyle bir yaklaşımı, başlangıç için gerçekten bir nesne gerekiyorsa tercih etmek daha kontrollüdür.
Bu ayrımı kısa kod sorularıyla pekiştirmek için Java bilgi testi üzerinden static ve instance üyeleri ayırt etmeyi deneyebilirsin.
Static blok ne zaman uygun, ne zaman dikkat gerektirir?
| Yapı | Ne zaman devreye girer? | Rolü |
|---|---|---|
| static blok | Sınıf başlatılırken. | Sınıfa ait başlangıç işlemlerini yürütür. |
| main | Giriş sınıfı başlatıldıktan sonra çağrılır. | Uygulamanın başlangıç noktasıdır. |
| kurucu metot | new ile nesne oluşturulurken. |
Yeni nesnenin başlangıç durumunu kurar. |
| normal instance metodu | Bir nesne üzerinden açıkça çağrıldığında. | Nesnenin davranışını yürütür. |
Static blok nesne başına değil, sınıfın ilk başlatılması sırasında çalışır. Kurucu metot ise new ile oluşturulan nesnenin başlangıç durumunu kurar. Giriş sınıfının başlatılması tamamlandıktan sonra main çağrılır; normal instance metodu belirli bir nesne için açık bir çağrıyla yürütülür.
Static blokların örtük çalışması, sınıf başlatıldığında beklenmeyen bir işlemin devreye girmesine neden olabilir. Paylaşılan static alanları değiştiren veya dış kaynaklara erişen işlemler gizli yan etkiler oluşturabilir. Bu durum testlerin izolasyonunu zorlaştırabilir ve bakımda sorunun hangi başlangıç adımından kaynaklandığını izlemeyi güçleştirebilir. Static alan ve blok sırasına bağımlı akışlar da okunabilirliği azaltabilir. Bu riskler her kullanımda ortaya çıkmaz; başlangıç işini kısa ve açık tutmak yardımcı olur.
Karar verirken üç soru sorabilirsin: İşlem sınıfa mı, nesneye mi ait? Hemen, sınıf başlatılırken mi yapılmalı, yoksa çağrı anında mı? İşlem nesnenin mevcut durumuna bağımlı mı? Sınıf düzeyindeki bir başlangıç işi için static blok düşünülebilir; nesne durumu veya açık zamanlama önemliyse kurucu ya da normal metot daha anlaşılır olabilir.
Bu ayrımları Java öğrenme sürecinde kendi seviyene uygun örneklerle pekiştirmek istersen, birebir Java özel ders programı hakkında bilgi alabilirsin.
Sık Sorulan Sorular
Static blok her nesne oluşturulduğunda yeniden çalışır mı?
Hayır. Static blok nesne oluşturma sayısına bağlı değildir; sınıf başlatma akışının parçasıdır. Sınıf başlatıldıktan sonra yapılan new çağrıları ilgili kurucuyu çalıştırır, static bloğu yeniden çalıştırmaz.
Bir sınıfta birden fazla static blok varsa hangisi önce çalışır?
Birden fazla static blok varsa, sınıf gövdesinde yukarıdan aşağıya yazıldıkları sırayla çalışırlar. Static alan başlatıcılarıyla birlikte kurulan akışta bu sıraya dikkat etmek gerekir.
Static blok içinde instance değişkeni veya metodu nasıl kullanılır?
Instance değişkeni veya metodu static blok içinde doğrudan kullanılamaz; çünkü belirli bir nesne yoktur. Önce new ile bir nesne oluşturup referansı üzerinden erişmek teknik olarak mümkündür. Ancak işlem nesne durumuna aitse bunu kurucuya veya instance metoduna taşımak daha açık olabilir.
Static blok yerine kurucu ya da normal metot ne zaman tercih edilir?
Her nesnenin başlangıcı ayrı kurulacaksa kurucu, işlem belirli bir anda açıkça çağrılacaksa normal metot tercih edilebilir. Parametre almak, nesne durumunu kullanmak veya işlemi yeniden çağırmak gerektiğinde bu yapılar daha esnektir. Sınıf düzeyindeki başlangıç işi için static blok düşünülebilir, fakat örtük çalışmasının bakım etkisi de hesaba katılmalıdır.
Static blok, kurucu ve normal metot arasındaki görev ayrımını gözetmek, Java kodunun akışını daha anlaşılır kılabilir.