摘要:本文,棧長將帶你了解什么是空指針,還有如何有效的避免空指針。如何避免空指針下面說幾個空指針的幾個最常見的案例及解決之道。字符串比較,常量放前面這個時候可能為造成空指針異常,應該把常量放前面,就能避免空指針異常。
空指針是我們 Java 開發人員經常遇到的一個基本異常,這是一個極其普遍但似乎又無法根治的問題。
本文,棧長將帶你了解什么是空指針,還有如何有效的避免空指針。
什么是空指針?當一個變量的值為 null 時,在 Java 里面表示一個不存在的空對象,沒有實際內容,沒有給它分配內存,null 也是對象成員變量的默認值。
所以,一個對象如果沒有進行初始化操作,這時候,如果你調用這個對象的方法或者變量,就會出現空指針異常。
如下面示例會發生空指針異常:
Object object = null; String string = object.toString();
從類結構圖來看,空指針它是屬于運行時異常 RuntimeException 的子類,它不是捕獲型的,只有在程序運行時才可能報出來,而且會造成程序中斷。
什么是運行時異常及異常的分類請看這篇文章:一張圖搞清楚 Java 異常機制。如何避免空指針?
下面說幾個空指針的幾個最常見的案例及解決之道。
1、字符串比較,常量放前面if(status.equals(SUCCESS)){ }
這個時候 status 可能為 null 造成空指針異常,應該把常量放前面,就能避免空指針異常。
if(SUCCESS.equals(status)){ }
這個應該在各種開發規范里面都會提到,也是最基礎的。
2、初始化默認值在對象初始化的時候給它一個默認值或者默認構造實現,如:
User user = new User(); String name = StringUtils.EMPTY;3、返回空集合
在返回一個集合的話,默認會是 null,統一規范返回一個空集合。
舉個 List 例子,如:
public List getUserList(){ List list = userMapper.gerUserList(); return list == null ? new ArrayList() : list; }
這樣接收方就不用擔心空指針異常了,也不會影響業務。
4、斷言斷言是用來檢查程序的安全性的,在使用之前進行檢查條件,如果不符合條件就報異常,符合就繼續。
Java 中自帶的斷言關鍵字:assert,如:
assert name == null : "名稱不能為空";
輸出:
Exception in thread "main" java.lang.AssertionError: 名稱不正確
不過默認是不啟動斷言檢查的,需要要帶上 JVM 參數:-enableassertions 才能生效。
Java 中這個用的很少,建議使用 Spring 中的,更強大,更方便好用。
Spring中的用法:
Assert.notNull(name,"名稱不能為空");5、Optional
Optional 是 JDK 8 新增的新特性,再也不用 != null 來判斷了,這個在一個對象里面的多個子對象連續判斷的時候非常有用。
這里不再詳細介紹了,具體看這篇文章:JDK8新特性之Optional。
這里大概介紹了 5 種,其實還有更多,如何避免空指針,一是要注意代碼編寫規范,二是要提高代碼素養。在Java技術棧微信公眾號后臺回復關鍵字:Java,可以獲取更多棧長整理的 Java 系列技術干貨。
大家都有什么高見,歡迎留言分享!
本文原創首發于微信公眾號:Java技術棧(id:javastack),關注公眾號在后臺回復 "Java" 可獲取更多,轉載請原樣保留本信息。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73085.html
摘要:空指針異常,操作一個對象的方法或屬性時會拋出這個異常。看一個示例它是受檢查異常,需要進行手工捕獲。類轉換異常,將一個不是該類的實例轉換成這個類就會拋出這個異常。 異常是 Java 程序中經常遇到的問題,我想每一個 Java 程序員都討厭異常,一 個異常就是一個 BUG,就要花很多時間來定位異常問題。 什么是異常及異常的分類請看這篇文章:一張圖搞清楚 Java 異常機制。 今天,棧長來列...
摘要:關于的三個謊言,你一定要清楚。這是的整個知識體系圖譜,對于新手來說,沒必要學那么多。第四自動化測試一切關于自動化的東西,似乎都可以滿足,可以滿足大多數自動化工作,提升工作效率。這都是正常的,千萬別急著否定自己,懷疑自己。 ...
摘要:我們應該考慮使用字符串常量調用方法來代替使用對象調用該方法。然而如果我們通過字符串常量來調用方法,執行流程會正常進行檢查方法的參數在執行方法的方法體之前,務必對方法的參數進行值檢查。 原文地址作者 Sotirios-Efstathios (Stathis) Maneas譯者 smallcloverThanks for your watching! java.lang.NullPoine...
摘要:換句話說,環境或應用程序沒有處于請求操作的適當狀態。項目中異常分析引發崩潰日志的流程分析解決辦法常見的出現場景狀態異常非法線程操作。導致的方法出來顯示消息位于該消息之后,遲遲沒有執行。這時候,的超時檢測結束,刪除了服務中的記錄。 目錄介紹 1.1 java.lang.UnsatisfiedLinkError找不到so庫異常 1.2 java.lang.IllegalStateExce...
摘要:引自手冊是相對長度單位。所有未經調整的瀏覽器都符合。特點是新增的一個相對單位,根,這個單位引起了廣泛關注。目前,除了及更早版本外,所有瀏覽器均已支持。對于不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。 在他處看到一篇好文章,想記錄在自己的學習筆記中,原文作者看到我轉載若是介意,聯系我立馬就刪除,附上原文鏈接:http://www.huolg.net/html5/htm...
閱讀 2142·2023-04-26 00:00
閱讀 3239·2021-09-24 10:37
閱讀 3528·2021-09-07 09:58
閱讀 1517·2019-08-30 15:56
閱讀 2217·2019-08-30 13:11
閱讀 2311·2019-08-29 16:38
閱讀 959·2019-08-29 12:58
閱讀 1876·2019-08-27 10:54