詳解Java中NullPointerException異常的原因和解決辦法
1、NullPointerException異常原因
一般空指針的原因就是:當(dāng)前正在使用的變量沒(méi)有對(duì)應(yīng)的值
也就是說(shuō):當(dāng)前正在使用的變量沒(méi)有引用指向?qū)?yīng)的值/對(duì)象
也可以這樣說(shuō):Null Pointer就相當(dāng)于Null Reference
如下面的代碼都會(huì)報(bào)空指針異常:
public class Main {
public static void main(String[] args) {
String str1 = null;
System.out.println(str1.toLowerCase()); //NullPointerException
}
}
public class Main {
String str2; //默認(rèn)值為null
public static void main(String[] args) {
Main ma = new Main();
System.out.println(ma.str2.toLowerCase()); //NullPointerException
}
}因?yàn)槌蓡T變量str2和局部變量str1都是默認(rèn)為null,所以都沒(méi)有具體的指向某個(gè)值/對(duì)象
定位NullPointerException
如果產(chǎn)生了NullPointerException,例如,調(diào)用a.b.c.x()時(shí)產(chǎn)生了NullPointerException,原因可能是:
- a是null;
- a.b是null;
- a.b.c是null;
確定到底是哪個(gè)對(duì)象是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ā)生的原因:一個(gè)變量A沒(méi)有值(或沒(méi)有指向?qū)?yīng)的對(duì)象),然后直接使用A的方法,或者將A當(dāng)成參數(shù)傳給其他對(duì)象/方法使用,就會(huì)報(bào)空指針異常!
2、NullPointerException異常解決辦法
第一步,先看一下異常是怎么產(chǎn)生的,在輸入一個(gè)這樣的地址:http://localhost:8083/***/***/***/***?productId=564564564573534,在控制臺(tái)就會(huì)如圖所報(bào)錯(cuò)

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

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

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

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

第六步,如果沒(méi)有其他錯(cuò)誤的話,此時(shí)頁(yè)面也應(yīng)該打開(kāi)了

到此這篇關(guān)于詳解Java中NullPointerException異常的原因和解決辦法的文章就介紹到這了,更多相關(guān)Java NullPointerException異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java空指針異常NullPointerException的原因與解決方案
- 解決java.lang.NullPointerException問(wèn)題(空指針異常)
- Java如何優(yōu)雅地避免空指針異常(NullPointerException)
- Java中redisTemplate注入失敗NullPointerException異常問(wèn)題解決
- java.lang.NullPointerException異常問(wèn)題解決方案
- 詳解Java中NullPointerException異常的原因詳解以及解決方法
- java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)
- Java中NullPointerException的異常解決
相關(guān)文章
SpringBoot使用AOP與注解實(shí)現(xiàn)請(qǐng)求參數(shù)自動(dòng)填充流程詳解
面向切面編程(aspect-oriented programming,AOP)主要實(shí)現(xiàn)的目的是針對(duì)業(yè)務(wù)處理過(guò)程中的切面進(jìn)行提取,諸如日志、事務(wù)管理和安全這樣的系統(tǒng)服務(wù),從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開(kāi)發(fā)的效率2023-02-02
Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片
RTF文檔因其跨平臺(tái)兼容性而廣泛使用,但有時(shí)在不同的應(yīng)用場(chǎng)景可能需要特定的文檔格式,所以本文來(lái)講講如何通過(guò)Java將RTF轉(zhuǎn)換為Word/PDF/HTML和圖片格式2025-01-01
三分鐘帶你了解SpringBoot真正的啟動(dòng)引導(dǎo)類
這篇文章主要介紹了三分鐘帶你了解SpringBoot真正的啟動(dòng)引導(dǎo)類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
利用keytools為tomcat 7配置ssl雙向認(rèn)證的方法
雙向認(rèn)證和單向認(rèn)證原理基本差不多,只是除了客戶端需要認(rèn)證服務(wù)端以外,增加了服務(wù)端對(duì)客戶端的認(rèn)證,下面這篇文章主要介紹了利用keytools為tomcat 7配置ssl雙向認(rèn)證的方法,需要的朋友可以借鑒,下面來(lái)一起看看吧。2017-02-02
Java常用集合與映射的線程安全問(wèn)題小結(jié)
本文給大家介紹Java常用集合與映射的線程安全問(wèn)題小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-04-04
SpringBoot中將@Bean方法解析為BeanDefinition詳解
這篇文章主要介紹了SpringBoot中將@Bean方法解析為BeanDefinition詳解,得到的BeanDefinition是ConfigurationClassBeanDefinition類型,會(huì)為BeanDefinition設(shè)置factoryMethodName,這意味著當(dāng)實(shí)例化這個(gè)bean的時(shí)候?qū)⒉捎霉S方法,需要的朋友可以參考下2023-12-12
MyBatis查詢數(shù)據(jù)庫(kù)語(yǔ)句總結(jié)
MyBatis是一種持久化框架,可以與許多不同類型的關(guān)系型數(shù)據(jù)庫(kù)連接,下面這篇文章主要給大家介紹了關(guān)于MyBatis查詢數(shù)據(jù)庫(kù)語(yǔ)句的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
java讀寫excel文件實(shí)現(xiàn)POI解析Excel的方法
在日常工作中,我們常常會(huì)進(jìn)行Excel文件讀寫操作,這篇文章主要介紹了java讀寫excel文件實(shí)現(xiàn)POI解析Excel的方法,實(shí)例分析了java讀寫excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10

