Kas ir ClassLoader Java?
sobes.tech AI
Atbilde no AI
Java ClassLoader ir ir abstrakta klase (java.lang.ClassLoader), kas atbild par klasu ielādi darba laikā. Tas atrod klases baitkodu (.class failu), pārvērš to par Class objektu un saglabā to JVM atmiņā.
Galvenās ClassLoader funkcijas:
- Ielāde: Klases baitkoda lasīšana no dažādiem avotiem (faila, tīkla utt.).
- Pārbaude: Drošības pārbaudes uz ielādētā baitkoda.
- Saistīšana (Linking):
- Verifikācija (Verification): Baitkoda pareizības pārbaude.
- Sagatavošana (Preparation): Statisko mainīgo inicializācija ar noklusējuma vērtībām.
- Rezolūcija (Resolution): Klases ielāde, uz kurām atsaucas pašreizējā klase, ja nepieciešams (dinamiski).
- Iniciācija (Initialization): Statisko bloku un statisko mainīgo piešķiršana.
ClassLoader hierarhija:
Java ir ClassLoader hierarhija ar deleģēšanu:
- Bootstrap ClassLoader: ielādē galvenās JDK klases (rt.jar). Rakstīts C++ un ir JVM daļa.
- Extension ClassLoader: ielādē klases no direktorijas
jre/lib/ext. Tas ir vecāks par Bootstrap ClassLoader. - System (Application) ClassLoader: ielādē klases no lietojumprogrammas direktorijas (
classpath). Tas ir vecāks par Extension ClassLoader. Atgriež metodiClassLoader.getSystemClassLoader().
Ielādējot klasi, ClassLoader vispirms deleģē pieprasījumu savam vecākam ClassLoader. Ja vecāks nevar atrast vai ielādēt klasi, pašreizējais ClassLoader mēģina to atrast pats. Tas novērš vienas un tās pašas klases vairākas ielādes un nodrošina saskaņotību.
Piemērs, kā iegūt ClassLoader:
// Iegūt sistēmas ClassLoader
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
// Iegūt Object klases ClassLoader
ClassLoader objectClassLoader = Object.class.getClassLoader();
Savu ClassLoader:
Jūs varat izveidot savus ClassLoader, mantojot no ClassLoader, lai ielādētu klases no nestandarta avotiem vai izmantotu īpašu ielādes loģiku.
// Vienkāršs Custom ClassLoader piemērs (demonstrācijai)
class CustomClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
// Reālam scenārijam šeit būtu baitkoda lasīšanas loģika
throw new ClassNotFoundException(name);
}
}
ClassLoader ir svarīgi moduļiem, drošībai un dinamiskai koda ielādei Java.