Öňki iki makalada, söhbetdeşliklerde köplenç soralýan käbir möhüm soraglary ara alyp maslahatlaşdyk. Dowam etmegiň we galan soraglara seretmegiň wagty geldi.
Çuňňur göçürmek we çuňňur göçürmek
Asyl nusgasynyň takyk nusgasy onuň klonydyr. Java-da bu, asyl obýekte meňzeş gurluşly bir obýekt döredip bilmek diýmekdir. Usulclone()
bu funksiýany üpjün edýär. Göçürmeleri mümkin boldugyça az göçüriň. Düzgüne görä, Java-da klonlaşdyrmak çuňňur, ýagny Object class
göçürýän synpynyň gurluşy hakda bilmeýär. Klonlaşdyrylanda JVM aşakdakylary edýär:
- Bir synpda diňe başlangyç görnüşleriň agzalary bar bolsa, obýektiň düýbünden täze nusgasy dörediler we şol obýekte salgylanma yzyna berler.
- Bir synpda diňe bir başlangyç görnüşleriň agzalary däl, eýsem beýleki synp görnüşleriniň agzalary hem bar bolsa, bu synplaryň obýektlerine salgylanmalar göçürilýär. Şonuň üçin iki obýektiň hem salgylanmalary bolar.
- Ilkinji maglumatlary aýratyn göçürmegiň zerurlygy ýok;
- Asyl synpdaky ähli agza synplary klonirlemegi goldamalydyr.
super.clone()
Her synp agzasy üçin usul ýok bolanda çagyrylmalyclone()
; - Bir synpyň agzasy klonirlemegi goldamaýan bolsa, onda klon usulynda, şol synpyň täze mysalyny döretmeli we agzalarynyň her birini täze synp obýektine ähli atributlary bilen göçürmeli.
Sinhronizasiýa näme? Obýekt derejesindäki gulplama we synp derejeli gulplama?
Sinhronizasiýa köp okalmagy aňladýar. Sinhronlaşdyrylan kod bloky diňe bir sapak bilen ýerine ýetirilip bilner. Java bir wagtda birnäçe sapaklary gaýtadan işlemäge mümkinçilik berýär. Bu, bir meýdana girmek isleýän iki ýa-da has köp sapagyň döremegine sebäp bolup biler. Sinhronizasiýa, ýat çeşmeleri nädogry ulanylanda ýüze çykýan ýat ýalňyşlyklaryndan gaça durmaga kömek edýär. Haçan-da bir usul sinhronlaşdyrylan diýlip yglan edilende, sapak monitory saklaýar. Başga bir sapak şu wagt sinhronlaşdyrylan usula girmäge synanyşsa, sapak petiklenýär we monitoryň erkin bolmagyna garaşýar. Java-da sinhronizasiýa ýörite sinhronlaşdyrylan açar söz bilen ýerine ýetirilýär . Synpyňyzda aýratyn bloklary ýa-da usullary şeýle belläp bilersiňiz. Sinhronlaşdyrylan açar söz synp üýtgeýjileri ýa-da atributlary bilen bilelikde ulanylyp bilinmez. Obýekt derejesindäki gulplama, statiki däl usuly ýa-da statik däl kod blokyny sinhronlamak isleýän wagtyňyz mehanizm bolup, synpyň belli bir mysalynda diňe bir sapak kod blokuny ýerine ýetirip biler. Bu mydama synp mysaly sapagyny ygtybarly etmek üçin edilmelidir. Synp derejesindäki gulplama, sapaklaryň bar bolan ýagdaýlary üçin köp sapaklaryň sinhron blokda girmeginiň öňüni alýar. Mysal üçin, “DemoClass” synpynyň 100 mysaly bar bolsa, belli bir wagtda üýtgeýänleriň birini ulanyp, diňe 1 sapak demoMethod () ýerine ýetirip biler. Bu hemişe statiki sapaklaryň howpsuzlygyny üpjün etmek üçin edilmelidir. Sinhronizasiýa barada has giňişleýin öwreniň.Uky () bilen garaşmak () arasynda näme tapawut bar?
Sleep()
prosesi birnäçe sekunt gijikdirmek üçin ulanylýan usuldyr. Şeýle ýagdaýda , ýa-da usuly wait()
çagyrýançak, sapak garaşýar . Esasy tapawut, gulpy boşatman, monitor gulpuny goýberýär . köp sapakly programmalar üçin ulanylýar, diňe sapagyň ýerine ýetirilmegini duruzmak üçin ulanylýar. häzirki sapagy belli bir wagt üçin "Işläp bolmaýar" ýagdaýyna salýar. Threadüp, bu usul çagyrylmazdan ozal monitoryň ýagdaýyny tygşytlaýar. Başga bir sapak jaň etse , “uklap galan” sapak oýanar. Munuň statiki usuldygyna üns beriň, bu hemişe häzirki sapaga täsir edýär (usuly ýerine ýetirýän ). Adaty ýalňyşlyk, başga bir sapagyň nirededigini çagyrmak ; usuly diýýän häzirki sapak sapak bolmasa -da. häzirki sapagy edil bolşy ýaly, ýöne birneme nuans bilen "Işläp bolmajak" ýagdaýyna iberýär. sapak däl-de, bir obýekte çagyryldy; bu obýekti “gulplama obýekti” diýip atlandyrýarys. Jaň etmezden ozal häzirki sapak “gulp obýekti” bilen sinhronlanmalydyr; şondan soň bu gulpy boşadýar we bu gulp bilen baglanyşykly "garaşmak sanawyna" sapak goşýar. Soň bolsa, başga bir sapak şol bir gulp obýekti bilen sinhronlaşyp, jaň edip biler . Bu usul henizem garaşýan asyl sapagy "oýarar". Aslynda, / bilen deňeşdirip bolar , diňe işjeň sapak uklaýan sapaga göni görkeziji gerek däl, diňe umumy gulp obýektini bilmeli. Jikme-jik tapawudy şu ýerden okaň.notify()
notifyAll()
wait()
sleep()
Wait()
sleep()
Thread.sleep()
t.interrupt()
sleep()
sleep()
t.sleep()
t
sleep()
t
Object.wait()
sleep()
Wait()
lock.wait()
wait()
lock.notify()
wait()
notify()
sleep()
interrupt()
Muňa salgylanma üýtgeýjisine null bellemek mümkinmi?
Nook. Java-da, ýumuş operatorynyň çep tarapy üýtgeýän bolmaly. "Bu", synpyň häzirki mysalyny berýän aýratyn açar söz. Diňe üýtgeýän däl. Şonuň ýaly-da, “super” açar söz ýa-da başga bir şuňa meňzeş açar söz ulanyp, üýtgeýjä null belläp bolmaz.&& bilen & arasynda näme tapawut bar?
&
- birneme we &&
- logiki taýdan.
&
amalyň iki tarapyna baha berýär;&&
amalyň çep tarapyna baha berýär. Çyn bolsa, sag tarapyna baha bermegi dowam etdirýär.
Deňdir () we hachCode () usullaryny nädip ýok etmeli?
hashCode()
we usullar Java obýektleri üçin esasy synp bolan equals()
synpda kesgitlenýär . Object
Şol sebäpli ähli Java obýektleri usullar üçin deslapky ýerine ýetiriş miras alýarlar. Bu usul, hashCode()
berlen obýekt üçin özboluşly bitewi san almak üçin ulanylýar. Bu bitewi san, obýekt saklanmaly bolanda obýektiň ýerleşýän ýerini kesgitlemek üçin ulanylýar HashTable
. Düzgüne görä, obýekt saklanýan ýadyň ýerleşýän ýeriniň salgysyny görkezýär hashCode()
. integer
Bu usul equls()
, adyndan görnüşi ýaly, iki obýektiň deňdigini ýa-da ýokdugyny barlamak üçin ulanylýar. Adaty ýerine ýetiriş, obýektleriň salgylanmalarynyň deňdigini ýa-da ýokdugyny barlaýar. Aşakda bu usullary täzeden ýüklemek üçin möhüm görkezmeler bar:
- Döredilende elmydama şol bir obýekt atributlaryny ulanyň
hashCode()
weequals()
; - Simmetriýa. Bular. käbir obýektler üçin hakykata gaýdyp
x
gelsey
x.equals(y)
,y.equals(x)
hakykata gaýdyp gelmeli; - Reflekslilik. Islendik obýekt
x
x.equals(x)
hakykata gaýdyp gelmeli; - Yzygiderlilik. Islendik obýekt üçin
x
wey
x.equals(y)
deňeşdirmelerde ulanylýan maglumatlar üýtgemese şol bir zady yzyna gaýtaryp berýär; - Geçiş. Islendik obýekt üçin
x
,y
we hakykata gaýdyp gelsez
, hakykata gaýdyp gelse;x.equals(y)
y.equals(z)
x.equals(z)
- Programma ýerine ýetirilende şol bir obýektde haýsydyr bir usul çagyrylsa, ulanylan maglumatlar üýtgemese, şol bir belgini yzyna gaýtarmaly.
hashCode
dürli amaly ýagdaýlarda birmeňzeş obýektler üçin dürli bahalary yzyna gaýtaryp biler; - Iki jisim deň bolsa, şoňa görä şol bir bahalary yzyna gaýtarmaly
equals
;hashCode
- Munuň tersi islege bagly däl. Iki sany deň däl obýekt şol bir hashCode-ny yzyna gaýtaryp biler. Şeýle-de bolsa, öndürijiligi gowulandyrmak üçin dürli obýektleriň dürli kodlary yzyna gaýtarmagy has gowudyr.
Giriş üýtgedijileri barada bize aýdyň
Java synplary, meýdanlary, konstruktorlary we usullary dört dürli giriş üýtgedijisinden birine eýe bolup biler: hususy Eger bir usul ýa-da üýtgeýji şahsy bellenen bolsa , üýtgeýjä diňe bir synpyň içindäki kod girip biler ýa-da usula jaň edip biler. Klassikleriň içindäki kod üýtgeýjä ýa-da usula girip bilmez, ýa-da başga synpdan girip bilmez. Şahsy giriş modifikatory köplenç konstruktorlar, usullar we üýtgeýjiler üçin ulanylýar. default Üýtgediji düýbünden görkezilmedik bolsa, deslapky giriş üýtgediji yglan edilýär . Bu üýtgediji, berlen synpyň meýdanlaryna, konstruktorlaryna we usullaryna synpyň içindäki kod, şol bir paketdäki synplaryň içindäki kod arkaly girip boljakdygyny aňladýar. Kiçi klasslar superklass bilen birmeňzeş paketde bolmasa, adaty diýlip yglan edilse, superklasyň usullaryna we agza üýtgeýjilerine girip bilmez . goralýan Gorag modifikatory deslapky ýaly işleýär , kiçi klasslar goralýan usullara we superklassanyň üýtgeýjilerine hem girip biler. Bu sözlem, kiçi klas superklass bilen bir paketde bolmasa-da dogry. köpçülige açyk giriş modifikatory, şol koduň nirede ýerleşýändigine garamazdan, ähli kodlaryň synpa, üýtgeýänlere, konstruktorlara ýa-da usullara girip biljekdigini aňladýar.Zibil ýygnaýjy näme? Biz oňa jaň edip bilerismi?
Zibil ýygnamak, häzirki zaman programmirleme dillerinde Java we NET.Framework dilleri ýaly awtomatiki ýady dolandyrmagyň aýratynlygydyr. Zibil ýygnamagy ulanýan diller, köplenç JVM ýaly wirtual maşynda zibil ýygnamagy düşündirýär. Zibil ýygnamagyň iki maksady bar: islendik ulanylmadyk ýat boşadylmaly we programma henizem ulanýan bolsa ýat boşadylmaly däldir. Zibil ýygnamagy el bilen işledip bilersiňizmi? .Ok,System.gc()
mümkin boldugyça size mümkinçilik berýär. System.gc()
Iň oňat wariant , zibil ýygnaýjynyň işlemelidigini görkezýän usuly çagyrmakdyr . Zibil ýygnaýjy kesgitleme bermeýänligi sebäpli, ony derrew işletmäge ýol ýok. Mundan başga-da, resminamalara görä, OutOfMemoryError
wirtual maşyn doly zibil ýygnanandan soň ýady boşadyp bilmese, ugradylmaz. Zibil ýygnaýjy hakda has giňişleýin öwreniň.
Keyerli açar söz nämäni aňladýar? Jikme-jik düşündiriň
Açar söz, usulyň Java faýlyndan başga programmirleme dilinde ýerine ýetirilendigini görkezmek üçin ulanylýar. Usuallyerli usullar geçmişde ulanylypdyr. Java-yň häzirki wersiýalarynda bu ýygy-ýygydan zerur däl. Häzirki wagtda ýerli usullar zerur:- Java-dan başga dilde ýazylan kitaphana çagyrmaly.
- Diňe başga bir dil (köplenç C) ulanyp bolýan ulgam ýa-da enjam çeşmelerine girmek zerur. Aslynda, hakyky kompýuter (diskler ýa-da tor maglumatlary ýaly) bilen täsirleşýän köp sanly ulgam funksiýasyny diňe ýerli usul bilen atlandyryp bolar.
- JNI / JNA, esasanam çylşyrymly bir zat etjek bolsaňyz, JVM-ni durnuksyzlaşdyryp biler. Nativeerli usulyňyz nädogry bir zat etse, JVM-iň ýykylmagy ähtimal. Mundan başga-da, ýerli usulyňyz birnäçe sapakdan çagyrylsa, erbet zatlar bolup biler. We ş.m.
- Nativeerli kod bilen programmany düzetmek has kyn .
- Codeerli kody beýleki platformalara daşamakda kynçylyk döredip biljek çarçuwalaryň aýratyn gurluşygyny talap edýär.
Seriýalaşdyrmak näme?
Informatika, maglumatlary saklamak we geçirmek nukdaýnazaryndan seriýalaşdyrmak, maglumat gurluşyny ýa-da obýektiň ýagdaýyny başga bir hasaplaýyş gurşawynda saklanyp we alyp boljak formata terjime etmekdir. Birnäçe bit alandan soň, seriýalaşma formatyna görä täzeden hasaplanýar we asyl obýektiň semantiki taýdan birmeňzeş klonyny döretmek üçin ulanylyp bilner. Java obýektiň interfeýsi amala aşyrmagyny talap edýän awtomatiki seriallaşdyrmagy üpjün edýärjava.io.Serializable
. Interfeýsiň ýerine ýetirilişi synpy "serializable" diýip belleýär. Java.io.Serializable interfeýsinde seriallaşdyrma usullary ýok, ýöne serializasiýa synpy serializasiýa / diserializasiýa prosesiniň bir bölegi hökmünde atlandyryljak usullary kesgitläp biler. Sapaklara üýtgeşmeler girizeniňizde, haýsysynyň seriallaşdyrma bilen laýyk gelmejekdigini we laýyk gelmejekdigini göz öňünde tutmaly. Doly görkezmeleri şu ýerden okap bilersiňiz. Iň möhüm nokatlary bererin: Gabat gelmeýän üýtgeşmeler:
- Bir meýdany pozuň;
- Ierarhiýada bir synpy ýokary ýa-da aşak süýşüriň;
- Statik däl meýdany statiki ýa-da wagtlaýyn däl üýtgetmek;
- Yglan edilen başlangyç maglumat görnüşini üýtgetmek;
- Usuly üýtgetmek,
WriteObject
ýa-daReadObject
indi meýdanlary ýazmazlyk ýa-da okamazlyk üçin; - Synpy üýtgetmek ýa-da
Serializable
tersineExternalizable
; - Enum synpyny enum däl ýa-da tersine üýtgetmek ;
- Aýyrmak
Serializable
ýa-daExternalizable
; - Bir klasa usul
writeReplace
goşmak .readResolve
- Meýdan goşmak;
- Sapaklary goşmak / aýyrmak;
- Usullary goşmak
WriteObject/ReadObject
[usullarydefaultReadObject
ýa-dadefaultWriteObject
başynda çagyrylmaly]; - Usullary aýyrmak
WriteObject/ReadObject
; - Goşmak
java.io.Serializable
; - Meýdana girişi üýtgetmek;
- Statik meýdany statik däl ýa- da wagtlaýyn däl üýtgetmek .
GO TO FULL VERSION