定義:NullPointerException由RuntimeException派生出來,是一個運行級別的異常。意思是說可能會在運行的時候才會被拋出,而且需要看這樣的運行級別異常是否會導致你的業務邏輯中斷。
發生原因:
發生原因:
1.空指針異常發生在對象為空,但是引用這個對象的方法以及自動裝箱自動拆箱的時候。
例如: String s = null; //對象s為空(null) int length = s.length();//發生空指針異常
2.一個變量是null,及只有其名,沒有實值內容,也沒分配內存,當你要去取他的長度,對他進行操作就會出現NullPointException,所以生命一個變量時最好給它分配好內存空間,給予賦值。
3.比如變量為空,而你沒有去判斷,就直接使用,就會出現NullPointException。寫程序時嚴謹些,盡量避免了,例如在拿該變量與一個值比較時,要么先做好該異常的處理
2.一個變量是null,及只有其名,沒有實值內容,也沒分配內存,當你要去取他的長度,對他進行操作就會出現NullPointException,所以生命一個變量時最好給它分配好內存空間,給予賦值。
3.比如變量為空,而你沒有去判斷,就直接使用,就會出現NullPointException。寫程序時嚴謹些,盡量避免了,例如在拿該變量與一個值比較時,要么先做好該異常的處理
如: if (str == null) { System.out.println("字符為空!"); }
當然也可以將這個值寫在前面進行比較的,例如,判斷一個String的實例s是否等於“a”,不要寫成s.equals("a"),這樣寫當s為空的時候容易拋出NullPointerException,而寫成"a".equals(s)就可以避免這個問題。不過對變量先進行判空后再進行操作比較好
4.盡量避免返回null,方法的返回值不要定義成為一般的類型,而是用數組。
4.盡量避免返回null,方法的返回值不要定義成為一般的類型,而是用數組。
如果list想要返回null的時候,就返回一個沒有元素的數組,然后再對list.size()==0進行判斷。就能避免許多不必要的NullPointerException,使用NullObject返回代替返回null確是一種不錯的選擇。注意,NullObject是特殊的null對像象
5.當valueOf()和toString()返回相同的結果時,寧願使用前者。
因為調用null對象的toString()會拋出空指針異常,如果我們能夠使用valueOf()獲得相同的值,那寧願使用valueOf(),傳遞一個null給valueOf()將會返回“null”,尤其是在那些包裝類,像Integer、Float、Double和BigDecimal。
推薦養成習慣:
1.習慣使用StringUtils,它的方法是空指針安全的,他們不會拋出空指針異常
2.逢對象多考慮一步
3.多使用第三方庫,使用spring framework 自帶的方法注解及lombk,但也要看清他們的方法執行的原理