JavaRush /Java Blog /Random-TK /Hileler we maslahatlar. Java programmalarynda NullPointer...
DarthVictor
Dereje

Hileler we maslahatlar. Java programmalarynda NullPointerException-dan nädip saklanmaly

Toparda çap edildi
Hileler we maslahatlar.  Java programmalarynda NullPointerException-dan nädip saklanmaly - 1Bu 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. Hileler we maslahatlar.  Java programmalarynda NullPointerException-dan nädip saklanmaly - 2

Ç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 bbolsa ) we şonuň üçin köp programmist haýsy obýektiň , y ýa-da y nulldiýilýändigine üns bermeýär . Munuň zyýanly täsirlerinden biri, usul çagyrylsa NullPointerException . equals()abnull
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 nulljaňdan peýdalanmak has gowudyr , sebäbi yzyna gaýdyp gelýär . Bu esasanam , ýa-da ýaly sapak sapaklary üçin has dogrydyr . valueOf()valueOf()nullnullIntegerFloatDoubleBigDecimal
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.

nullHowpsuz usullary we kitaphanalary ulanyň

Synag üçin agyr ýük alýan köp açyk çeşme kitaphanalary bar null. Iň ýaýranlardan biri StringUtilsApache 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.

nullUsuldan 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 Collectionsboş sanawlaryň, toplumlaryň we sözlükleriň amatly ýerine ýetirilişini ýörite yglan edýär Collections.EMPTY_LIST: Collections.EMPTY_SETwe 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_SETulanyp bilersiňiz . Collections.EMPTY_MAPnull

@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 nullbellikler 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. @NotNullnullnull@NotNull@Nullablenull

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 Employeeatsyz döredilip bilinmez id, ýöne telefon belgisi bolmazlygy mümkin. Bu ýagdaýda Employeebelgisiz 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 nullwe haýsysynyň dogry karara gelmegine goşmaça şertleriň bolmagy. Umuman aýdanyňda, programmany derrew ýykmak ýa-da nullony bellemegiň arasyndaky saýlama möhüm dizaýn kararydyr we saýlansoň, yzygiderli ýerine ýetirmeli.

DBMS derejesinde çäklendirmeleri belläň

nullMüş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 != nullprogramma 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 . IteratorSoň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. AsylNullhasNext()false
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION