![Hileler we maslahatlar. Java programmalarynda NullPointerException-dan nädip saklanmaly - 1]()
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.
Ç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;
if(unknownObject.equals("knownObject")){
System.err.println("This may result in NullPointerException if unknownObject is 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));
System.out.println(bd.toString());
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.
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 üçin
null
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 biler
null
. 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ýekti
Employee
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örite
Null
-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