您好,登錄后才能下訂單哦!
代碼檢查服務(wù)是如何降低Billion DollarMistake NPE風(fēng)險,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
“空安全(Null Safety)”是Kotin最吸引Java開發(fā)者的特性之一, Kotlin類型系統(tǒng)的目標(biāo)是消除Null reference的危險性。Tony Hoare在2019年QCon London上將Null reference稱為“my billion-dollar mistake”。所謂Null reference是許多編程語言最為常見的陷阱之一,指的是訪問Null reference的成員將導(dǎo)致null reference exception。在Java語言中,Nullreference通常等同于NullPointerException(即NPE)。
對于Java開發(fā)者來講,或許只有處理過了NPE,才能成為一名真正的Java開發(fā)者。NPE通常來講,會來自于以下場景:
調(diào)用了一個空對象的實例方法;
訪問或者修改一個空對象的域成員;
當(dāng)數(shù)組是一個空對象時,取它的長度;
對數(shù)組中的某些null元素進(jìn)行范文或者修改;
將null當(dāng)做Throwable值拋出
如何防止NPE,簡單來講,主要是兩點要素:手段與方法、意識與經(jīng)驗。Java開發(fā)者可以參考以下最佳實踐來防空:
通過已知字符串常量而不是未知對象來調(diào)用equals()與equalsIgnoreCase()方法
在valueOf()與toString()返回相同結(jié)果的地方優(yōu)先使用valueOf()
使用null安全的方法與庫
避免從方法中返回null,而是返回空的collection或者array
使用注解@NotNull和@Nullable
在代碼中避免不必要的autoboxing和unboxing
遵循Contract并定義合理的缺省值
在Java 8中使用Optional
雙重入?yún)⑿r?/p>
盡管Java開發(fā)者能力對于防空是至關(guān)重要的,然而人難免會有所失誤。為了進(jìn)一步降低風(fēng)險,華為云DevCloud建議項目或者產(chǎn)品團(tuán)隊使用代碼檢查服務(wù)來檢查是否存在NPE。
Code4Benchmark是采用Java開發(fā)的示例工程,希望用于評估代碼質(zhì)量評估工具或者云服務(wù)對代碼問題的檢查能力,例如空指針(Null Pointer)、資源泄露、SQL注入(SQL Injection)等。
對于空指針場景,目前主要是顯式解引用、前置判空、后置判空、空返回值等,代碼片段如下:
顯式解引用: 直接對null對象解引用
圖7 問題詳情與修改建議
NPE是Java開發(fā)中的經(jīng)典問題,華為云DevCloud代碼檢查服務(wù)提供的規(guī)則不止本文提到的3條規(guī)則,具體可以在“規(guī)則”中查看。在實際的項目開發(fā)中,用戶可以直接選擇“全面檢查規(guī)則”來進(jìn)行全方位的代碼質(zhì)量檢測,以提升代碼質(zhì)量。
W. Edwards Deming曾說過“Inspectionis too late. Quality cannot be inspected into a product or servive. It must bebuilt into it.”本質(zhì)上,軟件質(zhì)量取決于工程師的意識、能力、方法與技能。然而,工程師的意識、能力、方法與技能需要不斷提升。因而, 華為云DevCloud 代碼檢查服務(wù)在軟件交付中仍然具有舉足輕重的地位,不僅可以及時發(fā)現(xiàn)代碼質(zhì)量問題,而且可以強(qiáng)化工程師的預(yù)期行為,有助于提升工程師的意識、能力、方法與技能。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。