NullPointerException即空指針異常,俗稱NPE。 如果對象為null,則在調用方法或訪問該字段時將生成NullPointerException。 此異常通常由JVM拋出,如下所示:
公共類主{ publicstaticvoidmain (字符串[ ] args ) { String s=null; system.out.println (s.to lower case ); }指針這一概念實際上來源於c語言,Java語言中沒有指針。 我們定義的變量實際上是引用,空指針更準確地說是空參考,但兩者不太區分。
如果遇到處理NullPointerException的NullPointerException,該怎麽辦? 首先,NullPointerException是一個代碼邏輯錯誤,遇到NullPointerException,遵循原則是早期暴露、早期修複,嚴禁使用catch隱藏這個編碼錯誤
//錯誤示例:捕獲空輸入外圍設備{傳輸監視器(從、到、自動); }空點編碼(catch )良好的編碼習慣大大減少了空點編碼的生成,包括:
成員變量在定義時初始化。
公共類人員{私有屬性名稱=' '; }空字符串““可以避免許多NullPointerException,而不是默認的null。 創建業務邏輯時,使用空字符串“”表示未填寫比null安全得多。
空字符串'',返回空數組而不是空數組:
public string [ ] readlinesfromfile (string file ) if ) getfilesize (file==0) )//返回空數組,而不是空: return new string (返回新字符串) 0
如果調用方必須基於null進行判斷,例如,如果返回null表示文件不存在,則考慮返回Optional T。
publicoptionalstringreadfromfile (字符串文件) if (! 文件退出(文件) { return Optional.empty; } .這樣,調用方必須在Optional.isPresent ()中確定是否有結果。
如果生成了位置nullpointerexceptionnullpointerexception (例如,a.b.c.x ) ),則假設在調用時生成了nullpointerexception。 原因如下。
a為空; a.b為空; a.b.c為空; 從Java 14開始,如果發生NullPointerException,JVM將詳細告訴您空對象是誰。 請看一個例子:
public class main { publicstaticvoidmain (字符串[ ] args ) { Person p=new Person ); 係統. out.println (p.address.city.to lower case () ); } class person { string [ ] name=new string [2]; 地址地址=new地址(; }class Address { String city; 字符串條; 字符串zip代碼; 在NullPointerException的詳細信息中…可以看到類似because“. address.city”null的內容。 這意味著city字段為null,從而可以快速確定問題。
此增強的NullPointerException詳細信息是Java 14的新功能,但默認情況下處於禁用狀態。 可以將- xx : showcodedetailsinexceptionmessages參數添加到JVM中以啟用。
Java-xx 3360 showcodedetailsinexceptionmessagesmain.Java總結NullPointerException是Java代碼中常見的邏輯錯誤,必須快暴露快修複
可以啟用Java 14擴展異常信息以顯示NullPointerException的詳細錯誤消息。
11月份70個大中城市房價49個環比下降
2011CCTV中國經濟年度人物評選揭曉
專家稱今年人民幣升值壓力大
日媒稱日本將成人民幣國際化援軍
10月CPI今發布 機構料退燒至5.4%
陳德銘:預計今年貿易順差同比減少300多億美元