java.lang.NullPointerException 空指標異常問題
1.所謂的指標,就是java中的物件的引用。比如String s;這個s就是指標。
2.所謂的空指標,就是指標的內容為空,比如上面的s,如果令它指向null,就是空指標。
3.所謂的空指標異常,就是一個指標是空指標,你還要去操作它,既然它指向的是空物件,它就不能使用這個物件的方法。比如上面的s假如為null,你還要用s的方法,比如s.equals( String x);那麼就會產生空指標異常。
下面列出可能發生空指標異常的幾種情況及相應解決方案:
程式碼段1:
out.println(request.getParameter("username"));
分析:程式碼段1的功能十分簡單,就是輸出使用者輸入"username"的值。
說明:看上去,上面的語句找不出什麼語法錯誤,而且在大多數情況下也遇不到什麼問題。但是,如果某個使用者在輸入資料時並沒有提供表單 域"username" 的值,或通過某種途徑繞過表單直接輸入時,此request.getParameter("username")的值為空(注意不是空字串,是空物件 null。),out物件的println方法是無法直接對空物件操作的,因此程式碼段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物件的equals方法。譬如:
If ("root".equals(userName))
{....}
即使userName物件返回了null物件,這裡也不會有空指標異常,可以照常運轉。
程式碼段3:
String userName = session.getAttribute("session.username").toString();
分析:程式碼段3的功能是將session中session.username的值取出,並將該值賦給字串物件userName。
說明:在一般情況下,如果在使用者已經進行某個會話,則不會出現什麼問題;但是,如果此時應用伺服器重新啟動,而使用者還沒有重新登入,(也可能是使用者關閉瀏 覽器,但是仍開啟原來的頁面。)那麼,此時該session的值就會失效,同時導致session中的session.username的值為空。對一個 為 null的物件的直接執行toString()操作,就會導致系統丟擲空指標異常。
程式碼段4:
public static void main(String args[]){
Person p=null;
p.setName("張三");
System.out.println(p.getName());
}
分析:宣告一個Person物件,並列印出該物件的中的Name名字。
說明:這個時候你的p就出現空指標異常,因為你只是宣告瞭這個Person型別的物件並沒有建立物件,所以它的堆裡面沒有地址引用,切忌你要用對 象掉用方法的時候一定要建立物件
相關文章
- Java中的空指標異常 java.lang.NullPointerExceptionJava指標NullException
- NullPointerException空指標異常的理解NullException指標
- Java中如何避免空指標異常Java指標
- Kafka SimpleStringSchema 可能會造成空指標異常Kafka指標
- Java中如何處理空指標異常Java指標
- [轉載] java避免空指標異常_第1部分:在現代Java應用程式中避免空指標異常Java指標
- 【優雅程式碼】03-optional杜絕空指標異常指標
- C語言指標常見問題C語言指標
- springboot+mybatis,mapper呼叫查詢的資料為空,報空指標異常Spring BootMyBatisAPP指標
- 關於Paging + Room,RecyclerView重新整理時的空指標異常OOMView指標
- Spring中new出一個物件導致的空指標異常Spring物件指標
- Java8新特性之空指標異常的剋星Optional類Java指標
- 如何在 Java8 中風騷走位避開空指標異常Java指標
- 我在大廠做 CR——如何體系化防控空指標異常指標
- 關於C++當中的指標懸空問題C++指標
- 生產環境一次詭異的空指標問題,竟然反轉了4次指標
- 異常問題排查之旅
- 微服務異常問題微服務
- 二分類問題常見的評價指標指標
- 防止空指標指標
- 10.Java異常問題Java
- 有關this指標指向問題指標
- 聊一聊日常開發中如何優雅的避免那無處不在的空指標異常指標
- 記一次Java自動拆箱引發的空指標問題Java指標
- spingboot使用@Resource注入靜態變數報空指標的問題解決boot變數指標
- GO 空指標和nilGo指標
- 空指標的傳說指標
- React Native babel編譯異常問題React NativeBabel編譯
- Python異常 ValueError的問題詳解PythonError
- .net異常處理的效能問題
- excel多指標柱圖問題求教Excel指標
- Flink flatMap 使用lambda表示式異常問題
- Lombok生成get/set異常問題(Lombok缺陷)Lombok
- 如何避免空指標出錯?指標
- springboot整合redis,redisTemplate 空指標Spring BootRedis指標
- easyexcel字型空指標錯誤Excel指標
- mybatis配置執行報出Caused by: org.apache.ibatis.binding.BindingException:相關錯誤解決或者空指標異常MyBatisApacheException指標
- C語言第九周作業(指標變數,記憶體訪問,取址,空指標)C語言指標變數記憶體