java null 指標異常(java.lang.NullPointerException)

來源:互聯網
上載者:User

在Java中對值為null的指標調用任何方法,就會引發null 指標異常(java.lang.NullPointerException)。null 指標異常絕對 是Java中最難尋找和調試的一種異常,你永遠無法得到任何有用的調試資訊。通過個人日常總結和網上搜集整理,歸納如下,供大家參考。null 指標異常產生的主 要原因如下:所以在Java中一般報null 指標異常的原因有以下幾種: 
1字串變數未初始化; 
2介面類型的對象沒有用具體的類初始化,比如: 
List lt;會報錯 
List lt = new ArrayList();則不會報錯了 
3當一個對象的值為空白時,你沒有判斷為空白的情況。你可以試著把下面的代碼前加一行代碼: 
if(rb!=null && rb!="") 
改成: 
if(rb==null); 
if(rb!==null&&rb!="") 或者if((“”).equals(rb)) 
null 指標的解決辦法: 
       重點關注報錯發生的所在行,通過null 指標異常產生的兩條主要原因診斷具體的錯誤。同時為了避免null 指標的發生,最好在做判斷處理時將“null”或者空值放於 設定的值之前。 
常見null 指標異常的簡要分析: 
(1)null 指標錯誤 
    Java中的8種基礎資料型別 (Elementary Data Type),變數的值可以有其預設值,加入沒有對其正常賦值,java虛擬機器是不能 
正確編譯通過的,因此使用基本的Java資料類型一般不會是不會引起null 指標異常的。實際開發中,大多數的null 指標異常主要與對象的操作相關。 



下面列出可能發生null 指標異常的幾種情況及相應解決方案: 
程式碼片段1: 
  out.println(request.getParameter("username")); 
  分析:程式碼片段1的功能十分簡單,就是輸出使用者輸入"username"的值。 
       說明:看上去,上面的語句找不出什麼語法錯誤,而且在大多數情況下也遇不到什麼問題。但是,如果某個使用者在輸入資料時並沒有提供表單 域"username" 的值,或通過某種途徑繞過表單直接輸入時,此request.getParameter("username")的值為空白(注意不是Null 字元串,是Null 物件 null。),out對象的println方法是無法直接對Null 物件操作的,因此程式碼片段1所在的JSP頁面將會拋出
"Java.lang.NullPointerException"異常。而且即使對象可能為空白時,也調用Java.lang.Object或 Object對象本身的一些方法如toString(), equal(Object obj)等操作。 

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

      說明:在程式碼片段2中,如果有使用者沒有提供表單域"username"的值時,字串對象userName為null值,不能夠將一個null的對象與另一 個對象直接比較,同樣,程式碼片段2所在的JSP頁面就會拋null 指標錯誤。 

一個小技巧:如果要把某個方法的傳回值與常量做比較,把常量放在前面,可以避免調用null對象的equals方法。譬如:  

If ("root".equals(userName)) 
  {....} 
   
  即使userName對象返回了null對象,這裡也不會有null 指標異常,可以照常運轉。 

程式碼片段3: 
  String userName = session.getAttribute("session.username").toString(); 
        分析:程式碼片段3的功能是將session中session.username的值取出,並將該值賦給字串對象userName。 
       說明:在一般情況下,如果在使用者已經進行某個會話,則不會出現什麼問題;但是,如果此時應用伺服器重新啟動,而使用者還沒有重新登入,(也可能是使用者關閉瀏 覽器,但是仍開啟原來的頁面。)那麼,此時該session的值就會失效,同時導致session中的session.username的值為空白。對一個 為 null的對象的直接執行toString()操作,就會導致系統拋出null 指標異常。 

程式碼片段4: 
public static void main(String args[]){ 

       Person p=null; 

        p.setName("張三"); 

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



分析:聲明一個Person對象,並列印出該對象的中的Name名字。 

說明:這個時候你的p就出現null 指標異常,因為你只是聲明了這個Person類型的對象並沒有建立對象,所以它的堆裡面沒有地址引用,切忌你要用對 象掉用方法的時候一定要建立對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.