程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 由@NotNull注解引出的關於Java空指針的掌握

由@NotNull注解引出的關於Java空指針的掌握

編輯:關於JAVA

由@NotNull注解引出的關於Java空指針的掌握。本站提示廣大學習愛好者:(由@NotNull注解引出的關於Java空指針的掌握)文章只能為提供參考,不一定能成為您想要的結果。以下是由@NotNull注解引出的關於Java空指針的掌握正文


Java 小技能和在java運用防止NullPonintException的最好辦法

在java運用法式中,一個NullPonintException(空指針異常)是最好處理(成績)的辦法。同時,空指針也是寫硬朗的順暢運轉的代碼的症結。“預防好過醫治”這句話也異樣實用於使人不爽的NullPonintException。經由過程運用進攻性的編碼技巧和在遵照多個部門之間的商定,你可以再很年夜水平上防止NullPointException。上面的這些java小技能可以最小化像!=null這類檢討的代碼。作為經歷豐碩的java法式猿,你能夠認識到這些技巧的某部門項目傍邊應用它。然則關於年夜學一年級先生和中級開辟者,這是一個很好的進修機遇。

這是一些很輕易學會的簡略技巧,然則關於代碼質量和硬朗性來講確切很主要。以我的經歷,僅是第一個小技能就曾經對改良代碼質量具有很年夜的感化了。

1)在曾經的String(字符串)挪用 equal()和 equalsingnoreCase()而不是未知的對象

平日在曾經的非空字符串在挪用equals()。由於equal()辦法是對稱的,挪用a.equal()是一致於挪用b.equal(),和這就是為何許多部留意對象a和b,假如空的一邊被挪用會到招致空指針。

Object unknownObject = null;

//wrong way - may cause NullPointerException
if(unknownObject.equals("knownObject")){
  System.err.println("This may result in NullPointerException if unknownObject is null");
}
//right way - avoid NullPointerException even if unknownObject is null
if("knownObject".equals(unknownObject)){
  System.err.println("better coding avoided NullPointerException");
}

這是最主要的防止NullPointException的java技能,然則成果會是極年夜的改良,由於equal()是一個很廣泛的辦法。

2)在二者前往雷同成果的時刻傾向應用valueOf()而非toString()

由於空對象挪用toString()時會拋出NullPointException。假如我們可以經由過程挪用value()獲得雷同的值的話,就應當應用valueOf()。如許會傳遞會一個空值。特殊是在像Integer,Float,Double或許BigDecimla之類的包裝類的情形下。

BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //doesn't throw NPE
System.out.println(bd.toString()); //throws "Exception in thread "main" java.lang.NullPointerException"

假如你不肯定你所應用的對象能否是空的時刻,請應用這個JAVA技能

3)應用空平安辦法(null safe method)或許類庫

如今有許多曾經為你做了null檢討的開源組件湧現。個中一個最為廣泛的就是Apache的StringUtils。你可使用StringUtils.isBlank(),isNumberic(),isWhiteSpace()和其他對象一些不消擔憂NullPointException辦法。

System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));

Output:
true
true
false
false

但在作出任何結論之前,不要忘卻浏覽關於Null平安辦法和類的文檔。這是另外一個java最好操練,這不會請求你支付異常多的盡力,但會讓你取得很年夜的提高。

4)防止用前往空的collection或許空的array來取代從辦法中前往Null

這個java技能也是在Joshua Bloch的《Effective Java》所說起的。這本書也是一個進步JAVA編碼才能的一個起源。經由過程前往一個空的collection或許一個空的array可以肯定像size(),length()這類基本的挪用不會拋出NullPointException。Collection類可以或許供給便利的空的List,Set和Map,(這些)有Collections.EMPTY_LIST, Collections.EMPTY_SET和 Collections.EMPTY_MAP這些可以或許被應用的(靜態變量)。

代碼以下;

 public List getOrders(Customer customer){ 
  List result = Collections.EMPTY_LIST; 
return result; 
} 

相似地你可使用Collections.EMPTY_LIST, Collections.EMPTY_SET和 Collections.EMPTY_MAP來取代前往Null。

5)應用@NotNull和@Nullable正文

當寫你可以界說關於商定可空性(Nullability),要經由過程應用像@NotNull和@Nullable相似的正文提醒這個辦法能否為空平安(null safe)。古代的編譯器,IDE和其他對象可以讀出這個正文來幫你做一個空檢討或許告知你能否須要空檢討。IntelliJIDE和findbugs 曾經支撐這類正文。這些正文也是JSR 305(譯者注:可以懂得為java的尺度)的一部門。經由過程看到@NotNull和@Nullable,法式猿可以本身決議能否去停止空檢討。趁便說下,關於JAVA法式猿來講,這是新的最好的理論,雖然須要一點時光去順應。

6)遵守商定和界說公道的默許值

在java范疇,一個最好的防止空指針的辦法之一就是和定下商定和遵照商定。年夜部門的NullPointException產生緣由就是應用了一個不完全的信息或許並沒有被供給一切的依附信息來創立對象。假如你不許可創立不完全的對象和否認任何這類請求,你可以預防許多一段時光以後產生的NullPointException。假如對象被許可創立,那末你應當設定公道的默許值。例如,一個Employee(雇員)對象弗成以在沒有Id和Name屬性的情形下被創立,但可以有一個可供選擇的pghone number(德律風號碼)。假如Employee沒有phone number,那末就用前往一個0來取代前往一個空值。然則這類處置必需異常當心地處置對空值的檢討而不是檢討不法輸出。異樣要留意,界說可使空值的或許弗成以空值的時刻,提示挪用者作出原告知的決議。掉敗以後的選擇或許接收空值也是一個你須要看重的主要設計。

7)假如你應用數據庫去存儲你的域對象(demain object)
例如:Customer、Orders等等,那末你應當界說一些在數據庫對空值的束縛。由於數據庫可以請求取得從多個起源來的數據,在數據庫中具有對空值的檢討將會確保數據的完全性。在數據庫中保存對空值束縛的束縛也是會讓你削減在JAVA中削減空檢討的代碼。當從數據庫中掏出一個對象是,你可以確保那些屬性可所以空而那些屬性弗成以使空,這將會讓那些空檢討的代碼最小化。

8)應用空對象形式

這是別的一個在JAVA外面防止NullPointException的辦法。假如一個辦法前往一個對象,哪一個挪用者要遍歷這個對象,哪一個挪用者就要應用一些相似Collection.iterator()的辦法去前往iterator。假如挪用者沒有任何的上述的這些辦法,那末有能夠前往的是空對象而不是空(null)。空對象是一個特殊的對象,它在分歧的高低文中有分歧的寄義。像這些前往Contrainter或許Conllection類型的辦法的情形中,外面為空的對象(Empty object)應當被應用而不是前往空。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved