Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma
Sınıfların yüklenmesi, doğrulanması, hazırlanması, çözümlenmesi ve başlatılması aşamalarını adım adım inceleyin.
Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Sınıf Yükleme Yaşam Döngüsü
Bir Java sınıfı kullanılabilmeden önce üç aşamadan geçer: Yükleme (bayt kodunu bulup okuma), Bağlama (doğrulama, hazırlama, çözümleme) ve Başlatma (statik başlatıcıları çalıştırma).
Aşama 1: Yükleme
ClassLoader, .class dosyasını (dosya sisteminden, JAR'dan, ağdan veya oluşturulmuş bayt kodundan) okur ve onu temsil eden bir Class<?> nesnesini yığın üzerinde oluşturur.
// Trigger loading explicitly:
Class<?> c = Class.forName("com.example.MyService");
// The JVM delegates to the appropriate ClassLoader to find and load MyService.classAşama 2a: Doğrulama
Bayt kodu doğrulayıcısı, yüklenen bayt kodunun yapısal olarak geçerli ve tür açısından güvenli olduğunu ve JVM belirtimi kurallarına uyduğunu denetler. Geçersiz bayt kodu (örneğin ASM ile yanlış biçimde değiştirilmiş bayt kodu) VerifyError hatasına neden olur.
Aşama 2b: Hazırlama
JVM, statik alanlar için bellek ayırır ve bunlara varsayılan değerlerini (0, false, null) verir. Bu aşamada statik başlatıcılar henüz çalıştırılmamıştır.
public class Config {
static int timeout = 30; // after preparation: timeout = 0 (default)
static String host = "db"; // after preparation: host = null
// Both get their real values only after Initialization
}Aşama 2c: Çözümleme
Sabit havuzundaki sembolik başvurular (sınıf adları, yöntem imzaları), gerçek sınıflara ve yöntemlere yönelik doğrudan başvurularla (işaretçilerle) değiştirilir. Çözümleme ertelenebilir (gecikmeli çözümleme).
Aşama 3: Başlatma
Statik başlatıcılar (static {} blokları) ve statik alan atamaları metinsel sırayla çalışır. timeout = 30 ve host = "db" ifadeleri bu aşamada gerçekten yürütülür.
public class Config {
static int timeout;
static String host;
static {
timeout = Integer.parseInt(System.getenv("TIMEOUT"));
host = System.getenv("DB_HOST");
System.out.println("Config initialized");
}
}Sınıf Başlatmayı Tetikleyen Durumlar
Başlatma ilk şu durumlarda gerçekleşir: (1) örnek oluşturma, (2) statik alana erişim (sabit olmayan), (3) statik yöntem çağrısı, (4) Class.forName() aracılığıyla yansıma (initialize=true ile), (5) alt sınıfın başlatılması.
// forName with initialize=false skips static initializers:
Class<?> c = Class.forName("com.example.MyService", false, loader);<clinit> Yöntemi
JVM, tüm statik başlatıcılardan ve statik alan atamalarından bir <clinit> yöntemi (sınıf başlatıcısı) oluşturur. Bu yöntem tam olarak bir kez çalışır ve iş parçacığı açısından güvenlidir; JVM karşılıklı dışlamayı garanti eder.
ExceptionInInitializerError
Bir statik başlatıcı istisna fırlatırsa JVM bunu ExceptionInInitializerError içine sarar. Sınıfı kullanmaya yönelik sonraki girişimler NoClassDefFoundError fırlatır.
static {
if (System.getenv("DB_URL") == null)
throw new RuntimeException("DB_URL not set"); // wrapped in ExceptionInInitializerError
}Statik Başlatma Sırası
Statik başlatıcılar metindeki sırayla çalışır. Başlatma sırasında sınıflar arasındaki döngüsel bağımlılıklar, kısmen başlatılmış sınıflara yol açabilir; bu, İhtiyaç Üzerine Başlatıcı kalıbıyla ilgili bilinen bir tuzaktır.
class A {
static final int X = B.Y + 1; // accesses B before B is initialized!
}
class B {
static final int Y = A.X + 1; // circular!
}Sınıf Yüklemeyi Gözlemleme
Hangi sınıfların, nereden ve hangi ClassLoader tarafından yüklendiğini görmek için -Xlog:class+load=info (JVM 9 ve sonrası) ile sınıf yükleme günlük çıktısını etkinleştirin.
// JVM flag:
// java -Xlog:class+load=info:file=classload.log MyApp
// Output lines like:
// [info][class,load] com.example.MyService source: file:///app/app.jarKısa Kontrol
Statik başlatıcılar hangi aşamada çalışır?
Özet
Yükle: bayt kodunu oku. Bağla: doğrula → hazırla (sıfır varsayılanları) → çözümle (sembolik başvurular). Başlat: <clinit> kodunu çalıştır. Başlatma ilk kullanım tarafından tetiklenir ve iş parçacığı açısından güvenlidir. Başlatma sırasında oluşan döngüsel bağımlılıklar ince hatalara yol açar.
Sıkça Sorulan Sorular
“Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma” dersi ücretsiz mi?
Evet — “Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma” dersinde ne öğreneceğim?
Sınıfların yüklenmesi, doğrulanması, hazırlanması, çözümlenmesi ve başlatılması aşamalarını adım adım inceleyin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sınıf Yükleme Aşamaları: Yükleme, Bağlama, Başlatma
- ClassLoader Hiyerarşisi ve Özel Yükleyiciler
- javap ile Bayt Kodunu İnceleme
- JIT Derlemesi ve Katmanlı Derleme