java.lang.NullPointerException 空指針異常之一:對象真的爲空嗎?

    在開發中,需要傳入頁面表單作爲查詢條件,在DAO層進行數據庫的select操作,如果form爲空,那麼查詢所有的數據出來,如果form不爲空,那麼查詢滿足form條件的數據。我們把這個開發需求形象化一點:一個學生登錄教務處查看自己的成績,剛登錄成績查詢頁面的時候,什麼參數都沒有(form沒有值),看到的是他所有的成績;當他在課程名稱,課程所在學期(年),授課老師名字等輸入框輸入正常的數據後,點擊查詢按鈕(form有值了),查看到的是滿足form條件的數據。

    好了,需求描述完了,我在寫DAO的sql語句時,模仿着公司其他人的代碼寫的,除了數據庫語句不一樣外,其他所有都一樣,可是在跑的時候,我的就報了java.lang.NullPointerException異常,搞了很久沒有搞定,問了一下大佬,大佬說我的form對象爲空,我說你的(方法裏的參數)form在第一次跳轉頁面的時候也沒有值呀(就像我們登錄成績查詢頁面時看到的是我們全部的成績),他讓我再仔細看看兩個form有什麼不同,我才發現了區別,我把它們貼出來:

         

這個是正確的form,它爲空(null)嗎?它不爲空,爲空的是它的屬性。我們再來看看我方法裏面的form:

看到區別沒有,我的form是直接=null,這纔是導致空指針的原因:我在添加查詢參數,即form.getXXX()參數時,編譯檢查時會通過,但在運行時,form都爲空了,哪來的.getXXX()方法呢,所以報了空指針異常。

我們再往深處探究這兩個form的不同:正確的form有類型,有地址(JVM分配了空間),有參數,參數爲NULL,人家是完整的對象;而錯誤的form在JVM是不存在的, 是找不到的,也就是堆棧內存沒有地址引用的,這纔是它們之間最本質的區別。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章