Bu gün programmalaryňyzda NullPointerException-dan nädip gaça durmalydygy barada ýönekeý usullary görkezerin. Olary yzarlamak aňsat, ýöne koduňyzyň ygtybarlylygyny we hilini ep-esli ýokarlandyrýar. Mundan başga-da, meniň tejribämde, birinji maslahat koduňyzyň hiline ep-esli täsir eder. Başga bir Java programmirleme usullaryny bilýän bolsaňyz, teswirlerde paýlaşyp bilersiňiz.
Synag üçin agyr ýük alýan köp açyk çeşme kitaphanalary bar
Bu, Joşua Bloçyň “Java: Effective Programming” atly kitabynda beýan eden başga bir gowy Java programmirleme maslahaty. Boş kolleksiýalary ýa-da massiwleri yzyna getireniňizde, NullPointerException-y halaýan
Çagyryş näbelli bir obýekt däl-de, belli bir setirde deňdir () we deňIgnoreCase () usullaryna deňdir
equals()
Elmydama bilmeýän belli bir setirde bir usul çagyryň null
. Usul equals()
simmetrikdir, ýagny jaň edýär a.equals(b)
we b.equals(a)
şol bir netijäni berer (eger a
ýok b
bolsa ) we şonuň üçin köp programmist haýsy obýektiň , y ýa-da y null
diýilýändigine üns bermeýär . Munuň zyýanly täsirlerinden biri, usul çagyrylsa NullPointerException . equals()
a
b
null
Object unknownObject = null;
//плохой способ - может вызвать NullPointerException
if(unknownObject.equals("knownObject")){
System.err.println("This may result in NullPointerException if unknownObject is null");
}
//правильный способ - исключение NullPointerException не возникнет, даже если unknownObject null
if("knownObject".equals(unknownObject)){
System.err.println("better coding avoided NullPointerException");
}
Bu, NullPointerException-dan gaça durmak üçin iň ýönekeý maslahatdy, ýöne bu usul equals()
hemme ýerde barlygy sebäpli diňe bir uly özgerişlik edýär.
Ikisiniňem birmeňzeş netijesi bolan ýagdaýynda toString () -den valueOf () saýlaň
toString()
Gymmatlygy bolan salgylanmany çagyrmak NullPointerException-a zyňýandygy sebäpli , şol bir netijäni alyp bilýän wagtymyz null
jaňdan peýdalanmak has gowudyr , sebäbi yzyna gaýdyp gelýär . Bu esasanam , ýa-da ýaly sapak sapaklary üçin has dogrydyr . valueOf()
valueOf()
null
null
Integer
Float
Double
BigDecimal
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //не выбрасывает NPE
System.out.println(bd.toString()); //выбрасывает "Exception in thread "main" java.lang.NullPointerException"
Bir obýektiň bardygyny ýa-da ýokdugyny bilmeseňiz, bu maslahatlary ulanyň null
.
null
Howpsuz usullary we kitaphanalary ulanyň
Synag üçin agyr ýük alýan köp açyk çeşme kitaphanalary bar null
. Iň ýaýranlardan biri StringUtils
Apache Commons-dan. StringUtils.isBlank()
Methodsaly isNumeric()
we isWhiteSpace()
ş.m. ýaly usullary ulanmak. NullPointerException zyňmak barada alada etmeli däl.
//Методы StringUtils являются null-безопасными, они не вызовут NullPointerException
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));
Çykyş: hakyky hakyky ýalannull
we Şeýle-de bolsa, ulanmazdan ozal howpsuz usullaryň we synplaryň resminamalaryny okamagy ýatdan çykarmaň . Bu, köp zähmet talap etmän, uly ösüşlere alyp barýan iň oňat Java hileleriniň biridir.
null
Usuldan gaýdyp barmajak boluň , boş kolleksiýany yzyna gaýtarmak has gowudyr
Bu, Joşua Bloçyň “Java: Effective Programming” atly kitabynda beýan eden başga bir gowy Java programmirleme maslahaty. Boş kolleksiýalary ýa-da massiwleri yzyna getireniňizde, NullPointerException-y halaýan size()
ýa-da length()
zyňmaýandygyna göz ýetiriň. Synp Collections
boş sanawlaryň, toplumlaryň we sözlükleriň amatly ýerine ýetirilişini ýörite yglan edýär Collections.EMPTY_LIST
: Collections.EMPTY_SET
we Collections.EMPTY_MAP
. Mysal üçin:
public List getOrders(Customer customer){
List result = Collections.EMPTY_LIST;
return result;
}
Şonuň ýaly-da, gaýdyp gelmegiň ýerine Collections.EMPTY_SET
ulanyp bilersiňiz . Collections.EMPTY_MAP
null
@NotNull we @Nullable düşündirişleri ulanyň
Usullaryňyzyň beýanynda, usulyň yzyna gaýdyp boljakdygyny ýa-da yzyna gaýdyp bolmajakdygyny görkezmek üçinnull
bellikler we @Nullable ulanyp, usul howpsuzlygy konwensiýalaryny kesgitläp bilersiňiz . Döwrebap düzüjiler we IDE-ler bu bellikleri koduňyzy seljermek we degişli maslahatlar bermek üçin ulanyp bilerler, mysal üçin, çeki ýitirmek ýa-da tersine, kody ýapýan gereksiz çeki aýyrmak mümkinçiligi barada. Şeýle düşündirişler, mysal üçin, IntelliJ IDE we FindBugs tarapyndan goldanýar we JSR 305-de hem bar. IDöne IDE-de beýle bellikleri goldamaýan hem bolsa, özleri üçin gowy resminama bolar. Seredip , programmist üçin nirä çek goşmalydygyny we nirede goşmajakdygyna düşünmek has aňsat bolar . Theeri gelende aýtsak, bu Java programmistleriniň arasynda düýbünden täze bir tejribe we onuň ýaýramagy üçin wagt gerek bolar. @NotNull
null
null
@NotNull
@Nullable
null
Kodyňyzda gereksiz awtoboksdan we awtoboksdan gaça duruň
Bu diňe bir zerur däl wagtlaýyn zatlaryň döremegine sebäp bolman, eýsem awtoboks bilen örtük synpy bolsa, NullPointerException-a hem zyňyp bilernull
. Mysal üçin, adamyň girişinde telefon belgisi ýok bolsa we gaýdyp gelse, aşakdaky kod NullPointerException atar null
.
Person ram = new Person("ram");
int phone = ram.getPhone();
Awtobokslamak ýa-da awto-boks ulanylanda, diňe deňlikler däl, deňsizlikler hem <
> >
NullPointerException-a sebäp bolup biler.
Konwensiýalara eýeriň we ýerlikli defoltlary kesgitläň.
Java-da NullPointerException-dan gaça durmagyň iň oňat usullaryndan biri kodlaşdyrma konwensiýalaryny dogry yglan etmek we ýerine ýetirmekdir. “NullPointerExceptions” -iň köpüsi, zerur maglumatlary we garaşlylygy bolmazdan bir obýekt döretmäge synanyşanyňyzda ýüze çykýar. Şeýle haýyşlary sypaýylyk bilen ret edip, gutarylmadyk zatlaryň döredilmeginiň öňüni alyp, geljekde köp sanly NullPointerExceptions-den halas bolarsyňyz. Edil şonuň ýaly-da, obýekt döretmäge rugsat berseňiz, amatly bahany saýlamaly. Mysal üçin, synp obýektiEmployee
atsyz döredilip bilinmez id
, ýöne telefon belgisi bolmazlygy mümkin. Bu ýagdaýda Employee
belgisiz obýektler ýerine nol yzyna gaýdyp biler null
. Obýektiň şeýle özüni alyp barşyny öňünden pikirlenmeli bolsa-da, null
ýok belgä jaň etmekden barlamak has aňsat bolup biler. Bu ýagdaýda, haýsy meýdanlaryň bardygyny null
we haýsysynyň dogry karara gelmegine goşmaça şertleriň bolmagy. Umuman aýdanyňda, programmany derrew ýykmak ýa-da null
ony bellemegiň arasyndaky saýlama möhüm dizaýn kararydyr we saýlansoň, yzygiderli ýerine ýetirmeli.
DBMS derejesinde çäklendirmeleri belläň
null
Müşderiler ýa-da Sargytlar ýaly programma obýektleriňizi saklamak üçin maglumat bazasy ulanylanda, degişli tablisa çäklendirmelerini ulanyp, obýektleriňiziň “nessini” DBMS derejesinde kesgitlemek akyllydyr . Maglumatlar bazalarynda köplenç birnäçe çeşmeden maglumatlar bar we ýitirilen gymmatlyklary barlamak maglumatlaryňyzyň bitewiligini ýokarlandyrar. Mundan başga-da, DBMS derejesinde null barlaglaryň bolmagy olary Java koduňyzda azaldar: maglumatlar bazasyndan maglumatlary Java obýektlerine ýüklemek bilen, olaryň bardygyna göz ýetirip bilersiňiz we != null
programma kodundan gereksiz "" "aýyryp bilersiňiz.
Null obýekt nagşyny ulanyň
SpecialöriteNull
-obýektleri döretmek, Java-da NullPointerExcpetion-dan gaça durmagyň başga bir usulydyr. Programmamyzdaky käbir usul, programmanyň usullaryny çagyryp, soňraky işleýän obýektini yzyna gaýtaryp berýär diýip pikir edeliň. Mysal üçin, usul kolleksiýanyň üsti bilen gaýtalamak üçin ulanylýan Collection.iterator()
synpyň obýektini gaýtaryp berýär . Iterator
Soňra asyl obýektiň iteratory ýok bolsa, ýerine hemişe gaýdyp gelýän usuly bolan null
ýörite obýekti yzyna gaýtaryp bilersiňiz . Gadyrly okyjy, ine, NullPointerException ýalňyşlyklaryndan Java programmalaryny ýok etmek baradaky maslahatlarymy şu ýerde tamamlaýaryn. Bu ýönekeý we agyr däl düzgünleriň nähili peýdaly bolup biljekdigine düşünersiňiz. Aatlatma hökmünde, Java programmalarynda başga bir NullPointerException hilelerini paýlaşmak isleseňiz, teswirlerde arkaýyn boluň. JavaRush okuwçylary üçin ýörite terjime edildi. AsylNull
hasNext()
false
GO TO FULL VERSION