java 出現(xiàn)NullPointerException的原因及解決辦法
java 出現(xiàn)NullPointerException的原因及解決辦法
日常開(kāi)發(fā)過(guò)程中,最常見(jiàn)的異常莫過(guò)于NullPointerException,之前的時(shí)候,只是知道去找到報(bào)錯(cuò)的位置,然后去解決它,最近有空學(xué)習(xí)C語(yǔ)言,就去深究了下NullPointerException異常的本質(zhì)。
發(fā)生NullPointerException的情況:
- 調(diào)用 null 對(duì)象的實(shí)例方法。
- 訪問(wèn)或修改 null 對(duì)象的字段。
- 如果一個(gè)數(shù)組為null,試圖用屬性length獲得其長(zhǎng)度時(shí)。
- 如果一個(gè)數(shù)組為null,試圖訪問(wèn)或修改其中某個(gè)元素時(shí)。
- 在需要拋出一個(gè)異常對(duì)象,而該對(duì)象為 null 時(shí)。
首先,我們先找到Java.lang.NullPointerException這個(gè)類(lèi),內(nèi)容很簡(jiǎn)單:
package java.lang; /** * Thrown when a program tries to access a field or method of an object or an * element of an array when there is no instance or array to use, that is if the * object or array points to {@code null}. It also occurs in some other, less * obvious circumstances, like a {@code throw e} statement where the {@link * Throwable} reference is {@code null}. */ public class NullPointerException extends RuntimeException { private static final long serialVersionUID = 5162710183389028792L; /** * Constructs a new {@code NullPointerException} that includes the current * stack trace. */ public NullPointerException() { } /** * Constructs a new {@code NullPointerException} with the current stack * trace and the specified detail message. * * @param detailMessage * the detail message for this exception. */ public NullPointerException(String detailMessage) { super(detailMessage); } }
NullPointerException翻譯過(guò)來(lái)便是空指針,接下來(lái)我們首先要了解的是什么是指針,對(duì)于非C/C++的程序員來(lái)說(shuō),很多其它語(yǔ)言開(kāi)發(fā)者對(duì)指針的概念很模糊,說(shuō)白了,指針就是存儲(chǔ)變量的內(nèi)存地址,在c語(yǔ)言里面,NULL表示該指針不指向任何內(nèi)存單元,0表示指向地址為0的單元(這個(gè)單元一般是不能使用的)。先看一段C語(yǔ)言代碼:
void main() { int* i = NULL; printf("%#x\n", i); printf("%#x\n", &i); system("pause"); }
在C語(yǔ)言里,你可以讀取NULL本身的值(void *)0,即0,但是讀取它指向的值,那是非法的,會(huì)引發(fā)段錯(cuò)誤。而Java里面的NULL就是直接指向了0,上述也說(shuō)了,指向地址為0的單元,一般是不能使用的。
一句話總結(jié):因?yàn)橹赶蛄瞬豢墒褂玫膬?nèi)存單元,虛擬機(jī)無(wú)法讀取它的值,最終導(dǎo)致NullPointerException。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
上一篇:C++ 實(shí)現(xiàn)優(yōu)先隊(duì)列的簡(jiǎn)單實(shí)例
欄 目:C語(yǔ)言
下一篇:C++ 二維數(shù)組參數(shù)傳遞的實(shí)現(xiàn)方法
本文標(biāo)題:java 出現(xiàn)NullPointerException的原因及解決辦法
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1214.html
您可能感興趣的文章
- 01-10Linux下semop等待信號(hào)時(shí)出現(xiàn)Interrupted System Call錯(cuò)誤(EINTR)解決方法
- 01-10c 調(diào)用python出現(xiàn)異常的原因分析
- 01-10深入理解:Java是類(lèi)型安全的語(yǔ)言,而C++是非類(lèi)型安全的語(yǔ)言
- 01-10虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
- 01-10文件編譯時(shí)出現(xiàn)multiple definition of 'xxxxxx'的具體解決方法
- 01-10Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方
- 01-10ubuntu 下編譯C++代碼出現(xiàn)的問(wèn)題解決
- 01-10java實(shí)現(xiàn)任意四則運(yùn)算表達(dá)式求值算法
- 01-10深入解析C++和JAVA的字符串
- 01-10統(tǒng)計(jì)輸入字符各個(gè)字母出現(xiàn)頻率的解題思路


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?