詳解Java中NullPointerException異常的原因和解決辦法
1、NullPointerException異常原因
一般空指針的原因就是:當(dāng)前正在使用的變量沒有對應(yīng)的值
也就是說:當(dāng)前正在使用的變量沒有引用指向?qū)?yīng)的值/對象
也可以這樣說:Null Pointer就相當(dāng)于Null Reference
如下面的代碼都會報空指針異常:
public class Main {
public static void main(String[] args) {
String str1 = null;
System.out.println(str1.toLowerCase()); //NullPointerException
}
}
public class Main {
String str2; //默認值為null
public static void main(String[] args) {
Main ma = new Main();
System.out.println(ma.str2.toLowerCase()); //NullPointerException
}
}因為成員變量str2和局部變量str1都是默認為null,所以都沒有具體的指向某個值/對象
定位NullPointerException
如果產(chǎn)生了NullPointerException,例如,調(diào)用a.b.c.x()時產(chǎn)生了NullPointerException,原因可能是:
- a是null;
- a.b是null;
- a.b.c是null;
確定到底是哪個對象是null以前只能打印這樣的日志:
- System.out.println(a);
- System.out.println(a.b);
- System.out.println(a.b.c);
如下面的代碼:
public class test20210629 {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.address.city); //輸出:null
System.out.println(p.name[0]); //輸出:null
System.out.println(p.address.city.toLowerCase()); //空指針異常
System.out.println(p.name[0].toLowerCase()); //空指針異常
}
}
class Person {
String[] name = new String[2];
Address address = new Address();
}
class Address {
String city;
String street;
String zipcode;
}總結(jié):
空指針發(fā)生的原因:一個變量A沒有值(或沒有指向?qū)?yīng)的對象),然后直接使用A的方法,或者將A當(dāng)成參數(shù)傳給其他對象/方法使用,就會報空指針異常!
2、NullPointerException異常解決辦法
第一步,先看一下異常是怎么產(chǎn)生的,在輸入一個這樣的地址:http://localhost:8083/***/***/***/***?productId=564564564573534,在控制臺就會如圖所報錯

第二步,要解決這樣的空指針錯誤,就先要找到出錯誤的JAVA代碼,點擊就可以,如圖:

第三步,定位到j(luò)ava代碼后,在debug啟動項目,并添加斷點,怎么啟動debug:http://jingyan.baidu.com/article/19020a0a65e142529c284241.html

第四步,繼續(xù)第一步的地址,在debug的模式下可以看到此字段的值是Null, 如圖:

第五步,輸入正確的productId,如正確的鏈接是:http://localhost:8083/***/***/***/***?productId=47681438955545,如圖,debug模式下此字段就不是null,如圖:

第六步,如果沒有其他錯誤的話,此時頁面也應(yīng)該打開了

到此這篇關(guān)于詳解Java中NullPointerException異常的原因和解決辦法的文章就介紹到這了,更多相關(guān)Java NullPointerException異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java空指針異常NullPointerException的原因與解決方案
- 解決java.lang.NullPointerException問題(空指針異常)
- Java如何優(yōu)雅地避免空指針異常(NullPointerException)
- Java中redisTemplate注入失敗NullPointerException異常問題解決
- java.lang.NullPointerException異常問題解決方案
- 詳解Java中NullPointerException異常的原因詳解以及解決方法
- java.lang.NullPointerException 如何處理空指針異常的實現(xiàn)
- Java中NullPointerException的異常解決
相關(guān)文章
Java8新特性Lambda表達式的一些復(fù)雜用法總結(jié)
lambda表達式是JAVA8中提供的一種新的特性,它支持Java也能進行簡單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解
這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09
Java I/O深入學(xué)習(xí)之File和RandomAccessFile
這篇文章主要介紹了Java I/O深入學(xué)習(xí)之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對于一門程序語言來說,創(chuàng)建一個好的輸入/輸出系統(tǒng)并非易事。在充分理解Java I/O系統(tǒng)以便正確地運用之前,我們需要學(xué)習(xí)相當(dāng)數(shù)量的類。,需要的朋友可以參考下2019-06-06
mybatis執(zhí)行錯誤但sql執(zhí)行正常問題
這篇文章主要介紹了mybatis執(zhí)行錯誤但sql執(zhí)行正常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
java中URLencode、URLdecode及Base64加解密轉(zhuǎn)換
本文主要介紹了java中URLencode、URLdecode及Base64加解密轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
用C++實現(xiàn)求N!中末尾0的個數(shù)的方法詳解
這篇文章主要介紹了用C++實現(xiàn)求N!中末尾0的個數(shù)的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

