成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

別再寫 bug 了,避免空指針的 5 個(gè)案例!

zzzmh / 3367人閱讀

摘要:本文,棧長(zhǎng)將帶你了解什么是空指針,還有如何有效的避免空指針。如何避免空指針下面說(shuō)幾個(gè)空指針的幾個(gè)最常見(jiàn)的案例及解決之道。字符串比較,常量放前面這個(gè)時(shí)候可能為造成空指針異常,應(yīng)該把常量放前面,就能避免空指針異常。

空指針是我們 Java 開(kāi)發(fā)人員經(jīng)常遇到的一個(gè)基本異常,這是一個(gè)極其普遍但似乎又無(wú)法根治的問(wèn)題。

本文,棧長(zhǎng)將帶你了解什么是空指針,還有如何有效的避免空指針。

什么是空指針?

當(dāng)一個(gè)變量的值為 null 時(shí),在 Java 里面表示一個(gè)不存在的空對(duì)象,沒(méi)有實(shí)際內(nèi)容,沒(méi)有給它分配內(nèi)存,null 也是對(duì)象成員變量的默認(rèn)值。

所以,一個(gè)對(duì)象如果沒(méi)有進(jìn)行初始化操作,這時(shí)候,如果你調(diào)用這個(gè)對(duì)象的方法或者變量,就會(huì)出現(xiàn)空指針異常。

如下面示例會(huì)發(fā)生空指針異常:

Object object = null;
String string = object.toString();

從類結(jié)構(gòu)圖來(lái)看,空指針?biāo)菍儆谶\(yùn)行時(shí)異常 RuntimeException 的子類,它不是捕獲型的,只有在程序運(yùn)行時(shí)才可能報(bào)出來(lái),而且會(huì)造成程序中斷。

什么是運(yùn)行時(shí)異常及異常的分類請(qǐng)看這篇文章:一張圖搞清楚 Java 異常機(jī)制。
如何避免空指針?

下面說(shuō)幾個(gè)空指針的幾個(gè)最常見(jiàn)的案例及解決之道。

1、字符串比較,常量放前面
if(status.equals(SUCCESS)){
    
}

這個(gè)時(shí)候 status 可能為 null 造成空指針異常,應(yīng)該把常量放前面,就能避免空指針異常。

if(SUCCESS.equals(status)){
    
}

這個(gè)應(yīng)該在各種開(kāi)發(fā)規(guī)范里面都會(huì)提到,也是最基礎(chǔ)的。

2、初始化默認(rèn)值

在對(duì)象初始化的時(shí)候給它一個(gè)默認(rèn)值或者默認(rèn)構(gòu)造實(shí)現(xiàn),如:

User user = new User();
String name = StringUtils.EMPTY;
3、返回空集合

在返回一個(gè)集合的話,默認(rèn)會(huì)是 null,統(tǒng)一規(guī)范返回一個(gè)空集合。

舉個(gè) List 例子,如:

public List getUserList(){
    List list = userMapper.gerUserList();
    return list == null ? new ArrayList() : list;
}

這樣接收方就不用擔(dān)心空指針異常了,也不會(huì)影響業(yè)務(wù)。

4、斷言

斷言是用來(lái)檢查程序的安全性的,在使用之前進(jìn)行檢查條件,如果不符合條件就報(bào)異常,符合就繼續(xù)。

Java 中自帶的斷言關(guān)鍵字:assert,如:

assert name == null : "名稱不能為空";

輸出:

Exception in thread "main" java.lang.AssertionError: 名稱不正確

不過(guò)默認(rèn)是不啟動(dòng)斷言檢查的,需要要帶上 JVM 參數(shù):-enableassertions 才能生效。

Java 中這個(gè)用的很少,建議使用 Spring 中的,更強(qiáng)大,更方便好用。

Spring中的用法:

Assert.notNull(name,"名稱不能為空");
5、Optional

Optional 是 JDK 8 新增的新特性,再也不用 != null 來(lái)判斷了,這個(gè)在一個(gè)對(duì)象里面的多個(gè)子對(duì)象連續(xù)判斷的時(shí)候非常有用。

這里不再詳細(xì)介紹了,具體看這篇文章:JDK8新特性之Optional。

這里大概介紹了 5 種,其實(shí)還有更多,如何避免空指針,一是要注意代碼編寫規(guī)范,二是要提高代碼素養(yǎng)。在Java技術(shù)棧微信公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字:Java,可以獲取更多棧長(zhǎng)整理的 Java 系列技術(shù)干貨。

大家都有什么高見(jiàn),歡迎留言分享!

本文原創(chuàng)首發(fā)于微信公眾號(hào):Java技術(shù)棧(id:javastack),關(guān)注公眾號(hào)在后臺(tái)回復(fù) "Java" 可獲取更多,轉(zhuǎn)載請(qǐng)?jiān)瓨颖A舯拘畔ⅰ?/pre>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73085.html

相關(guān)文章

  • 10 個(gè)深惡痛絕 Java 異常。。

    摘要:空指針異常,操作一個(gè)對(duì)象的方法或?qū)傩詴r(shí)會(huì)拋出這個(gè)異常。看一個(gè)示例它是受檢查異常,需要進(jìn)行手工捕獲。類轉(zhuǎn)換異常,將一個(gè)不是該類的實(shí)例轉(zhuǎn)換成這個(gè)類就會(huì)拋出這個(gè)異常。 異常是 Java 程序中經(jīng)常遇到的問(wèn)題,我想每一個(gè) Java 程序員都討厭異常,一 個(gè)異常就是一個(gè) BUG,就要花很多時(shí)間來(lái)定位異常問(wèn)題。 什么是異常及異常的分類請(qǐng)看這篇文章:一張圖搞清楚 Java 異常機(jī)制。 今天,棧長(zhǎng)來(lái)列...

    marek 評(píng)論0 收藏0
  • 關(guān)于Python個(gè)謊言,別再盲目學(xué)Python

    摘要:關(guān)于的三個(gè)謊言,你一定要清楚。這是的整個(gè)知識(shí)體系圖譜,對(duì)于新手來(lái)說(shuō),沒(méi)必要學(xué)那么多。第四自動(dòng)化測(cè)試一切關(guān)于自動(dòng)化的東西,似乎都可以滿足,可以滿足大多數(shù)自動(dòng)化工作,提升工作效率。這都是正常的,千萬(wàn)別急著否定自己,懷疑自己。 ...

    TZLLOG 評(píng)論0 收藏0
  • How to handle Null Pointer Exception(譯)

    摘要:我們應(yīng)該考慮使用字符串常量調(diào)用方法來(lái)代替使用對(duì)象調(diào)用該方法。然而如果我們通過(guò)字符串常量來(lái)調(diào)用方法,執(zhí)行流程會(huì)正常進(jìn)行檢查方法的參數(shù)在執(zhí)行方法的方法體之前,務(wù)必對(duì)方法的參數(shù)進(jìn)行值檢查。 原文地址作者 Sotirios-Efstathios (Stathis) Maneas譯者 smallcloverThanks for your watching! java.lang.NullPoine...

    MRZYD 評(píng)論0 收藏0
  • Android實(shí)際開(kāi)發(fā)bug大總結(jié)

    摘要:換句話說(shuō),環(huán)境或應(yīng)用程序沒(méi)有處于請(qǐng)求操作的適當(dāng)狀態(tài)。項(xiàng)目中異常分析引發(fā)崩潰日志的流程分析解決辦法常見(jiàn)的出現(xiàn)場(chǎng)景狀態(tài)異常非法線程操作。導(dǎo)致的方法出來(lái)顯示消息位于該消息之后,遲遲沒(méi)有執(zhí)行。這時(shí)候,的超時(shí)檢測(cè)結(jié)束,刪除了服務(wù)中的記錄。 目錄介紹 1.1 java.lang.UnsatisfiedLinkError找不到so庫(kù)異常 1.2 java.lang.IllegalStateExce...

    peixn 評(píng)論0 收藏0
  • 別再被各種單位迷惑:px/em/rem

    摘要:引自手冊(cè)是相對(duì)長(zhǎng)度單位。所有未經(jīng)調(diào)整的瀏覽器都符合。特點(diǎn)是新增的一個(gè)相對(duì)單位,根,這個(gè)單位引起了廣泛關(guān)注。目前,除了及更早版本外,所有瀏覽器均已支持。對(duì)于不支持它的瀏覽器,應(yīng)對(duì)方法也很簡(jiǎn)單,就是多寫一個(gè)絕對(duì)單位的聲明。 在他處看到一篇好文章,想記錄在自己的學(xué)習(xí)筆記中,原文作者看到我轉(zhuǎn)載若是介意,聯(lián)系我立馬就刪除,附上原文鏈接:http://www.huolg.net/html5/htm...

    teren 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zzzmh

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<