java 出現(xiàn)NullPointerException的原因及解決辦法
java 出現(xiàn)NullPointerException的原因及解決辦法
日常開發(fā)過程中,最常見的異常莫過于NullPointerException,之前的時候,只是知道去找到報錯的位置,然后去解決它,最近有空學習C語言,就去深究了下NullPointerException異常的本質(zhì)。
發(fā)生NullPointerException的情況:
- 調(diào)用 null 對象的實例方法。
- 訪問或修改 null 對象的字段。
- 如果一個數(shù)組為null,試圖用屬性length獲得其長度時。
- 如果一個數(shù)組為null,試圖訪問或修改其中某個元素時。
- 在需要拋出一個異常對象,而該對象為 null 時。
首先,我們先找到Java.lang.NullPointerException這個類,內(nèi)容很簡單:
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翻譯過來便是空指針,接下來我們首先要了解的是什么是指針,對于非C/C++的程序員來說,很多其它語言開發(fā)者對指針的概念很模糊,說白了,指針就是存儲變量的內(nèi)存地址,在c語言里面,NULL表示該指針不指向任何內(nèi)存單元,0表示指向地址為0的單元(這個單元一般是不能使用的)。先看一段C語言代碼:
void main() {
int* i = NULL;
printf("%#x\n", i);
printf("%#x\n", &i);
system("pause");
}

在C語言里,你可以讀取NULL本身的值(void *)0,即0,但是讀取它指向的值,那是非法的,會引發(fā)段錯誤。而Java里面的NULL就是直接指向了0,上述也說了,指向地址為0的單元,一般是不能使用的。
一句話總結(jié):因為指向了不可使用的內(nèi)存單元,虛擬機無法讀取它的值,最終導(dǎo)致NullPointerException。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- java調(diào)用webservice的.asmx接口的使用步驟
- Java中ExecutorService和ThreadPoolExecutor運行原理
- Java調(diào)用WebService接口作測試
- JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解
- JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解
- Java 使用Axis調(diào)用WebService的示例代碼
- java使用xfire搭建webservice服務(wù)的過程詳解
- Java使用ExecutorService來停止線程服務(wù)
- Java解析調(diào)用webservice服務(wù)的返回XML串詳解
- 在spring boot中使用java線程池ExecutorService的講解
- Java中避免NullPointerException的方法總結(jié)
- Java xml出現(xiàn)錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException
- Zend Studio for Eclipse的java.lang.NullPointerException錯誤的解決方法
- java靜態(tài)工具類注入service出現(xiàn)NullPointerException異常處理
相關(guān)文章
使用opencv實現(xiàn)車道線檢測實戰(zhàn)代碼
這篇文章主要介紹了opencv車道線檢測實戰(zhàn),效果非常逼真,代碼簡單易懂,對opencv車道線檢測實戰(zhàn)代碼感興趣的朋友一起看看吧2022-03-03
C++ vector及實現(xiàn)自定義vector以及allocator和iterator方式
這篇文章主要介紹了C++ vector及實現(xiàn)自定義vector以及allocator和iterator方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字
這篇文章主要為大家介紹了C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

