Која је улога ЦлассЛоадер-а у Јави?



Овај чланак је свеобухватан водич о томе како ЦлассЛоадер ради на Јави. Расправља о врстама, принципима и методама ЦлассЛоадер-а у Јави.

Док радимо у Јави, често користимо велики број часова. Ове Јава класе се не учитавају одједном у меморији, већ се учитавају када то захтева апликација. Ту се појављују Јава ЦлассЛоадерс. Дакле, у овом чланку ћу разговарати о томе како да користим ЦлассЛоадер у Јави заједно са примерима.

У овом чланку биће обрађене следеће теме:





  1. Шта је ЦлассЛоадер?
  2. Врсте ЦлассЛоадер-а
  3. Принципи ЦлассЛоадер-а
  4. Методе ЦлассЛоадер-а
  5. Прилагођени ЦлассЛоадер

Почнимо!

Шта је ЦлассЛоадер у Јави?

ЦлассЛоадер у Јави позива Јава Рунтиме Енвиронмент да динамички учита класе кад год то захтева апликација у Јава виртуелна машина . Пошто су ЦлассЛоадерс део Јава Рунтиме Енвиронмент-а, Јава Виртуал Мацхине неће имати представу о основним датотекама и системима датотека.



Сада, да разумемо различите типове уграђених ЦлассЛоадерс-а у Јави.

Типови ЦлассЛоадер у Јави

Различити типови ЦлассЛоадерс у Јави су следећи:

Разговарајмо о сваком од њих један по један.



Додатак ЦлассЛоадер

Као што и само име говори, Ектенсион ЦлассЛоадер учитава екстензије основних Јава класа из ЈДК Библиотека продужетака. Подређено је Боотстрап ЦлассЛоадер-у и учитава екстензије из директоријума ЈРЕ / либ / тект или било ког другог директоријума наведеног у својству система јава.ект.дирс.

Апликација или систем ЦлассЛоадер

Апликација или Систем ЦлассЛоадер је подређено проширењу ЦлассЛоадер. Овај тип ЦлассЛоадер учитава све класе нивоа апликације пронађене у опцији командне линије -цп или у променљивој околине ЦЛАССПАТХ.

Боотстрап ЦлассЛоадер

Као што сви то знамо Јава Цлассес учитава инстанца јава.ланг.ЦлассЛоаде. Али, с обзиром да су ЦлассЛоадерс класе, Боотстрап ЦлассЛоадер је одговоран за учитавање ЈДК интерних класа. БоотСтрап ЦлассЛоадер је машински код који започиње операцију када је ЈВМ позове и учитава класе из рт.јар. Дакле, можете да схватите да сервис Боотстрап ЦлассЛоадер нема матични ЦлассЛоадер и да је стога познат као Примордиал ЦлассЛоадер.

Белешка: Приоритет Боотстрапа је већи од Ектенсион, а приоритет који се даје Ектенсион ЦлассЛоадер је већи од Апплицатион ЦлассЛоадер. Погледајте доњу слику:

Врсте ЦлассЛоадер - ЦлассЛоадер у Јави - Едурека

Следеће у овом чланку, хајде да разумемо принципе на којима ЦлассЛоадер ради.

Принципи ЦлассЛоадер-а у Јави

Скуп правила на основу којих Јава ЦлассЛоадер ради су следећа три принципа:

Да разумемо сваког од њих.

Својство јединствености

Ово својство осигурава да нема понављања класа и да су све класе јединствене. Својство јединствености такође осигурава да класе учитава надређени ЦлассЛоадер, а не учитава подређени ЦлассЛоадер. У сценарију, када надређени ЦлассЛоадер не може да пронађе класу, тада ће тренутна инстанца покушати да то уради сама.

Модел делегирања

ЦлассЛоадер у Јави ради на основу скупа операција задатих моделом делегирања. Дакле, кад год се генерише захтев за проналажење класе или ресурса, тада ће инстанца ЦлассЛоадер делегирати претрагу класе или ресурса надређеном ЦлассЛоадер.

Скуп операција на основу којих ЦлассЛоадер ради је следећи:

  • Јава виртуелна машина проверава да ли је класа учитана или не, кад год наиђе на класу.
  • У случају када је учитана класа ЈВМ наставља са извршењем класе, али у случају када класа није учитана, ондаЈВМ тражи да Јава ЦлассЛоадер подсистем учита ту одређену класу. Након тога, подсистем ЦлассЛоадер даје контролу апликацији ЦлассЛоадер.
  • Апплицатион ЦлассЛоадер затим делегира захтев Проширењу ЦлассЛоадер, који затим прослеђује захтев Боотстрап ЦлассЛоадер-у.
  • Сада, Боотстрап ЦлассЛоадер претражује уБоотстрап пут до класе да бисте проверили да ли је класа доступна или не. Ако је класа доступна, тада је учитана, иначе се захтев поново прослеђује Ектенсион ЦлассЛоадер.
  • Екстензија ЦлассЛоадер проверава класу у путањи класе екстензије.Ако је класа доступна, тада је учитана, иначе се захтев поново прослеђује Апплицатион ЦлассЛоадер-у.
  • На крају, Апплицатион ЦлассЛоадер тражи класу у путањи класе апликације.Ако је класа доступна, тада је учитана, иначе ћете видети изузетак ЦлассНотФоундЕкцептион.

Погледајте доњу слику.

Принцип видљивости

Према овом принципу, дечији часови су видљиви класама које учитавају његови матични ЦлассЛоадерс, али обрнуто није тачно. Дакле, класе учитане од стране Апплицатион ЦлассЛоадер имају видљивост у класе учитане од стране Ектенсион и Боотстрап ЦлассЛоадер.

На пример, ако имамо две класе: А & Б, претпоставимо да класу А учитава Апплицатион ЦлассЛоадер, а класу Б Ектенсионс ЦлассЛоадер. Овде су класе А и Б видљиве свим оним класама које учитава Апплицатион ЦлассЛоадер, али класа Б је видљива само оним класама које учитава Ектенсион ЦлассЛоадер.

Такође, ако покушате да учитате ове класе помоћу Боотстрап ЦлассЛоадер-а, видећете јава.ланг.ЦлассНотФоундЕкцептион . изузетак.

Добро, сада када знате типове ЦлассЛоадерс-а и принципе који стоје иза тога, погледајмо неколико важних методаод јава.ланг.ЦлассЛоадер класа.

Методе ЦлассЛоадер-а у Јави

Неколико битних ЦлассЛоадер су следећи:

лоадЦласс (Име низа, логичка резолуција)

Овај метод је улазна тачка ЦлассЛоадер-а и користи се за учитавање класе на коју се позива ЈВМ. Потребно је име као параметар. ЈВМ позива методу лоадЦласс () да би разрешио референце класе постављањем логичке вредности на тачно. Само ако треба да утврдимо да ли класа постоји или не, логички параметар је постављен на фалсе.

Изјава:

јавна класа лоадЦласс (име низа, логичка резолуција) баца ЦлассНотФоундЕкцептион {

дефинеЦласс ()

Коначна метода која се користи за дефинисање низа бајтова као инстанце класе. У случају да је класа тада неваљана, она баца ЦлассФорматЕррор.

Изјава:

заштићена коначна класа дефинеЦласс (Име низа, бајт [] б, инт искључен, инт лен) баца ЦлассФорматЕррор

финдЦласс (име низа)

Метода финдЦласс се користи за проналажење наведене класе. Дакле, она само проналази класу са потпуно квалификованим именом као параметар, али не учитава класу. Начин лоадЦласс () позива ову методу ако родитељ ЦлассЛоадер не може пронаћи тражену класу. Такође, ако ниједан родитељ ЦлассЛоадер не пронађе класу, подразумевана имплементација баца а ЦлассНотФоундЕкцептион.

Изјава:

заштићена класа финдЦласс (име низа) баца ЦлассНотФоундЕкцептион

Цласс.форНаме (Име низа, логичка иницијализација, учитавач ЦлассЛоадер)

Овај метод се користи за учитавање и иницијализацију класе. Даје могућност избора било ког од ЦлассЛоадерс и ако је параметар ЦлассЛоадер НУЛЛ, тада се аутоматски користи Боотстрап ЦлассЛоадер.

Изјава:

јавна статичка класа форНаме (име низа, логичка иницијализација, учитавач ЦлассЛоадер) баца ЦлассНотФоундЕкцептион

гетПарент ()

Метода гетПарент користи се за враћање надређеног ЦлассЛоадер-а на делегирање.

Изјава:

јавни коначни ЦлассЛоадер гетПарент ()

гетРесоурце ()

Као што и само име говори, метода гетРесоурце () покушала је да пронађе ресурс са датим именом. У почетку ће делегирати захтев надређеном ЦлассЛоадер-у за ресурс. У случају да је родитељ нулл, претражује се путања ЦлассЛоадер уграђеног у ЈВМ. Ако ово не успе, тада ће метода позвати финдРесоурце (Стринг) како би пронашла ресурс, где је име ресурса наведено као улаз који може бити апсолутни или релативни пут класе. Затим враћа УРЛ објекат за читање ресурса или враћа нулу вредност ако ресурс нема одговарајуће привилегије за враћање ресурса или ако није пронађен.

Изјава:

јавни УРЛ гетРесоурце (назив низа)

Следеће, у овом чланку о ЦлассЛоадер-у на Јави, разјаснимо Цустом ЦлассЛоадер.

Прилагођени ЦлассЛоадер у Јави

Уграђени ЦлассЛоадерс ће се побринути за већину случајева када су датотеке већ у систему датотека, али ако желите да учитате класе са локалног чврстог диска, онда морате да користите прилагођене ЦлассЛоадерс.

Направите прилагођени ЦлассЛоадер

Да бисте креирали прилагођени ЦлассЛоадер, потребно је да проширите ЦлассЛоадер класе и надјачати финдЦласс () метода:

шта је виртуелна метода

Пример: Креирајмо прилагођени ЦлассЛоадер који проширује подразумевани ЦлассЛоадер и учитава низ бајтова из наведене датотеке. Погледајте доњи код.

упаковати едурека увоза јава.ио.БитеАрраиОутпутСтреам импорт јава.ио.Филе импорт јава.ио.ИОЕкцептион импорт јава.ио.ИнпутСтреам публиц цласс Сампле протеже ЦлассЛоадер {@Оверриде публиц Цласс финдЦласс (Стринг сампленаме) тхровс ЦлассНотФоундЕкцептион {бите [] б = цустомЛоадЦлассФромФиле (сампленаме) ретурн дефинеЦласс (сампленаме, б, 0, б.ленгтх)} привате бите [] цустомЛоадЦлассФромФиле (Стринг демофиленаме) {ИнпутСтреам инСтреам = гетЦласс (). гетЦлассЛоадер (). гетРесоурцеАсСтреам (демофиле.реплаце ('.', Филе. сепараторЦхар) + '.цласс') бите [] буффер БитеАрраиОутпутСтреам бСтреам = нев БитеАрраиОутпутСтреам () инт нектВалуе = 0 три {вхиле ((нектВалуе = инСтреам.реад ()) = -1) {бСтреам.врите (нектВалуе)}} цатцх (ИОЕкцептион е) {е.принтСтацкТраце ()} буффер = бСтреам.тоБитеАрраи () ретурн буффер}}

Овим смо завршили овај чланак о ЦлассЛоадер-у на Јави. Надам се да сте разумели шта су ЦлассЛоадерс у Јави, њене методе, различити типови ЦлассЛоадерс, итд.

Ако сте пронашли овај чланак о „ЦлассЛоадер у Јави“, погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250 000 задовољних ученика раширених широм света. Овде смо да вам помогнемо у сваком кораку на путовању, јер поред тога што постављате питања о јава интервјуу, осмислили смо наставни план и програм који је дизајниран за студенте и професионалце који желе да буду Јава Програмер.

Имате питање за нас? Молимо вас да га поменете у одељку за коментаре овог „ЦлассЛоадер-а на Јави ' и јавићемо вам се у најкраћем могућем року.