Bok tamo! Kao dobavljač utovarivača, dobio sam hrpu pitanja o svim vrstama utovarivača. Ali danas ću malo promijeniti brzinu i govoriti o nečemu iz svijeta Jave: učitavaču klasa. Sada se možda pitate kakve veze ima utovarivač klase s utovarivačima koje isporučujem, poputPotpuno hidraulički rovokopač-utovarivač,Mali utovarivač gusjeničar, iUtovarivač na kotačima od 6 tona. Pa, sve je u konceptu "učitavanja", bilo da se radi o učitavanju fizičkih materijala ili učitavanju Java klasa.
Krenimo od osnova. U Javi, učitavač klasa je poput malog pomagača koji je odgovoran za učitavanje Java klasa u Java Virtual Machine (JVM) tijekom izvođenja. Vidite, Java je prilično cool jezik koji koristi značajku koja se zove "dinamičko učitavanje klase". To znači da se klase ne učitavaju sve odjednom kada se program pokrene. Umjesto toga, učitavaju se samo kada su stvarno potrebni. I tu stupaju učitavači razreda.
U Javi postoje različite vrste učitavača klasa. Prvi je Bootstrap Class Loader. On je super važan jer je napisan u izvornom kodu (poput C ili C++) i na vrhu je hijerarhije učitavača klasa. Odgovoran je za učitavanje najosnovnijih Java klasa, poput onih ujava.langpaket. Ovo su klase koje su JVM-u potrebne za pravilno funkcioniranje od samog početka. Na primjer,Objektklasa, koja je korijen svih Java klasa, učitava Bootstrap Class Loader.
Sljedeći je Extension Class Loader. Ovaj učitavač je napisan u Javi i učitava klase iz direktorija Java proširenja. To su dodatne klase koje mogu proširiti osnovnu funkcionalnost Java platforme. Nalazi se odmah ispod Bootstrap Class Loader-a u hijerarhiji.
Tu je i System Class Loader (također poznat kao Application Class Loader). Ovo je učitavač s kojim je većina Java programera upoznata. Odgovoran je za učitavanje klasa iz classpath-a, koji je skup direktorija i JAR datoteka koje navedete kada pokrenete Java program. Ako gradite vlastitu Java aplikaciju, klase koje napišete i kompajlirate obično će učitati System Class Loader.
Proces učitavanja klase slijedi ono što se naziva "model delegiranja". Evo kako to radi. Kada se od učitavača klase traži da učita klasu, on ne pokušava odmah pronaći i učitati samu klasu. Umjesto toga, prvo delegira zahtjev učitavaču roditeljske klase. Dakle, ako System Class Loader dobije zahtjev za učitavanje klase, proslijedit će taj zahtjev Extension Class Loaderu, a Extension Class Loader će ga proslijediti Bootstrap Class Loaderu.
Učitavač roditeljske klase zatim pokušava pronaći i učitati klasu. Ako ne može pronaći klasu, proslijedit će zahtjev natrag dolje učitavaču klase dijete. Ovaj proces se nastavlja sve dok se klasa ne učita ili svi učitavači klasa u hijerarhiji ne uspiju pronaći klasu. Ovaj model pomaže osigurati da se klase učitavaju na dosljedan i siguran način. Na primjer, sprječava učitavanje višestrukih kopija iste klase od strane različitih učitavača klasa, što bi moglo uzrokovati razne probleme u JVM-u.
Još jedna zgodna stvar kod učitavača klasa je da se mogu koristiti za stvaranje različitih "verzija" klasa u istoj JVM. To se zove "izolacija klase". Ovo bi vam moglo trebati u situaciji kada imate različite dijelove svoje aplikacije koji se oslanjaju na različite verzije iste biblioteke. Korištenjem prilagođenih učitavača klasa možete učitati različite verzije istih klasa u odvojene "prostore učitavača klasa", tako da ne ometaju jedni druge.
Sada, razgovarajmo o prilagođenim učitavačima klasa. Kao razvojni programer, možete kreirati vlastite učitavače klasa tako što ćete podklasiratiClassLoaderklasa u Javi. Učitavači prilagođenih klasa korisni su u mnogim scenarijima. Na primjer, možda želite učitati razrede iz mrežnog izvora ili iz prilagođenog formata datoteke. Možda radite na sustavu dodataka za svoju aplikaciju i želite dopustiti korisnicima da dodaju vlastitu funkcionalnost ubacivanjem datoteka prilagođenih klasa. Prilagođeni učitavač klasa može podnijeti učitavanje tih klasa s bilo kojeg mjesta na kojem su pohranjene.
Evo jednostavnog primjera kako možete stvoriti prilagođeni učitavač klasa:
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; javna klasa MyClassLoader extends ClassLoader { @Override protected Class<?> findClass(String name) throws ClassNotFoundException { String fileName = name.replace('.', File.separatorChar) + ".class"; pokušajte { File classFile = new File(fileName); FileInputStream fis = new FileInputStream(classFile); ByteArrayOutputStream bos = novi ByteArrayOutputStream(); bajt[] međuspremnik = novi bajt[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead); } fis.close(); bajt[] classBytes = bos.toByteArray(); return defineClass(name, classBytes, 0, classBytes.length); } catch (IOException e) { throw new ClassNotFoundException(name, e); } } }
U ovom primjeru stvaramo prilagođeni učitavač klasa koji učitava klase iz lokalnog datotečnog sustava. ThepronađiKlasumetoda je nadjačana, gdje implementiramo logiku za pronalaženje i učitavanje bajtova klase.
Dakle, zašto je sve ovo važno u stvarnom svijetu? Pa, u velikim Java aplikacijama, učitavanje klase može imati veliki utjecaj na performanse i stabilnost. Ako vaša aplikacija ima složenu hijerarhiju učitavača klasa ili ako koristi prilagođene učitavače klasa, morate biti sigurni da sve radi ispravno. Neispravno učitavanje klasa može dovesti do pogrešaka kao što suClassNotFoundExceptioniliNoClassDefFoundError.
S druge strane, ako razumijete kako rade učitavači klasa, možete ih koristiti u svoju korist. Na primjer, možete optimizirati proces učitavanja klase kako biste smanjili vrijeme pokretanja ili možete koristiti izolaciju klase kako biste svoju aplikaciju učinili modularnijom i robusnijom.


Kao što smo ranije spomenuli, kao i različite vrste učitavača koje isporučujem, svaki sa svojom jedinstvenom funkcijom, učitavači klasa u Javi također imaju svoje specifične uloge. Bilo da se radi o snažnom Bootstrap Class Loaderu ili prilagođenom učitavaču klasa za posebne aplikacije, svi oni rade zajedno kako bi pokrenuli svijet Jave.
Eto ga, ubrzani tečaj o tome što je učitavač klase u Javi. Ako želite kupiti utovarivače za svoje građevinske ili srodne projekte, imamo širok raspon opcija, uključujućiPotpuno hidraulički rovokopač-utovarivač,Mali utovarivač gusjeničar, iUtovarivač na kotačima od 6 tona. Ako ste zainteresirani saznati više o našim proizvodima i započeti pregovore o nabavi, slobodno nam se obratite. Uvijek nam je drago razgovarati i pronaći najbolje rješenje za utovarivač za vaše potrebe.
Reference:
- "Učinkovita Java" Joshue Blocha.
- Oracle Java dokumentacija za ClassLoader.




