日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 空指针异常(java.lang.NullPointerException)

發(fā)布時(shí)間:2025/6/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 空指针异常(java.lang.NullPointerException) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在Java中對值為null的指針調(diào)用任何方法,就會(huì)引發(fā)空指針異常(java.lang.NullPointerException)。空指針異常絕對 是Java中最難查找和調(diào)試的一種異常,你永遠(yuǎn)無法得到任何有用的調(diào)試信息。通過個(gè)人日常總結(jié)和網(wǎng)上搜集整理,歸納如下,供大家參考。空指針異常產(chǎn)生的主 要原因如下:所以在Java中一般報(bào)空指針異常的原因有以下幾種:?
1字符串變量未初始化;?
2接口類型的對象沒有用具體的類初始化,比如:?
List lt;會(huì)報(bào)錯(cuò)?
List lt = new ArrayList();則不會(huì)報(bào)錯(cuò)了?
3當(dāng)一個(gè)對象的值為空時(shí),你沒有判斷為空的情況。你可以試著把下面的代碼前加一行代碼:?
if(rb!=null && rb!="")?
改成:?
if(rb==null);?
if(rb!==null&&rb!="") 或者if((“”).equals(rb))?
空指針的解決辦法:?
?????? 重點(diǎn)關(guān)注報(bào)錯(cuò)發(fā)生的所在行,通過空指針異常產(chǎn)生的兩條主要原因診斷具體的錯(cuò)誤。同時(shí)為了避免空指針的發(fā)生,最好在做判斷處理時(shí)將“null”或者空值放于 設(shè)定的值之前。?
常見空指針異常的簡要分析:?
(1)空指針錯(cuò)誤?
??? Java中的8種基本數(shù)據(jù)類型,變量的值可以有其默認(rèn)值,加入沒有對其正常賦值,java虛擬機(jī)是不能?
正確編譯通過的,因此使用基本的Java數(shù)據(jù)類型一般不會(huì)是不會(huì)引起空指針異常的。實(shí)際開發(fā)中,大多數(shù)的空指針異常主要與對象的操作相關(guān)。?



下面列出可能發(fā)生空指針異常的幾種情況及相應(yīng)解決方案:?
代碼段1:?
  out.println(request.getParameter("username"));?
  分析:代碼段1的功能十分簡單,就是輸出用戶輸入"username"的值。?
?????? 說明:看上去,上面的語句找不出什么語法錯(cuò)誤,而且在大多數(shù)情況下也遇不到什么問題。但是,如果某個(gè)用戶在輸入數(shù)據(jù)時(shí)并沒有提供表單 域"username" 的值,或通過某種途徑繞過表單直接輸入時(shí),此request.getParameter("username")的值為空(注意不是空字符串,是空對象 null。),out對象的println方法是無法直接對空對象操作的,因此代碼段1所在的JSP頁面將會(huì)拋出 "Java.lang.NullPointerException"異常。而且即使對象可能為空時(shí),也調(diào)用Java.lang.Object或 Object對象本身的一些方法如toString(), equal(Object obj)等操作。?

代碼段2:?
  String userName = request.getParameter("username");?
  If (userName.equals("root"))?
  {....}?
  分析:代碼段2的功能是檢測用戶提供的用戶名,如果是用戶名稱為"root"的用戶時(shí),就執(zhí)行一些特別的操 作。????????????????????????????????????????????????????????????????????????

????? 說明:在代碼段2中,如果有用戶沒有提供表單域"username"的值時(shí),字符串對象userName為null值,不能夠?qū)⒁粋€(gè)null的對象與另一 個(gè)對象直接比較,同樣,代碼段2所在的JSP頁面就會(huì)拋空指針錯(cuò)誤。?

一個(gè)小技巧:如果要把某個(gè)方法的返回值與常量做比較,把常量放在前面,可以避免調(diào)用null對象的equals方法。譬如:??

If ("root".equals(userName))?
  {....}?
???
? 即使userName對象返回了null對象,這里也不會(huì)有空指針異常,可以照常運(yùn)轉(zhuǎn)。?

代碼段3:?
  String userName = session.getAttribute("session.username").toString();?
??????? 分析:代碼段3的功能是將session中session.username的值取出,并將該值賦給字符串對象userName。?
?????? 說明:在一般情況下,如果在用戶已經(jīng)進(jìn)行某個(gè)會(huì)話,則不會(huì)出現(xiàn)什么問題;但是,如果此時(shí)應(yīng)用服務(wù)器重新啟動(dòng),而用戶還沒有重新登錄,(也可能是用戶關(guān)閉瀏 覽器,但是仍打開原來的頁面。)那么,此時(shí)該session的值就會(huì)失效,同時(shí)導(dǎo)致session中的session.username的值為空。對一個(gè) 為 null的對象的直接執(zhí)行toString()操作,就會(huì)導(dǎo)致系統(tǒng)拋出空指針異常。?

代碼段4:?
public static void main(String args[]){?

?????? Person p=null;?

??????? p.setName("張三");?

??? System.out.println(p.getName());?

}?

分析:聲明一個(gè)Person對象,并打印出該對象的中的Name名字。?

說明:這個(gè)時(shí)候你的p就出現(xiàn)空指針異常,因?yàn)槟阒皇锹暶髁诉@個(gè)Person類型的對象并沒有創(chuàng)建對象,所以它的堆里面沒有地址引用,切忌你要用對 象掉用方法的時(shí)候一定要?jiǎng)?chuàng)建對象。

總結(jié)

以上是生活随笔為你收集整理的java 空指针异常(java.lang.NullPointerException)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。