在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Java14處理NullPointerException新方式

jf_ro2CN3Fa ? 來源:鍋外的大佬 ? 作者:鍋外的大佬 ? 2022-10-11 17:56 ? 次閱讀

1.傳統(tǒng)的 NullPointerException

2.增強型 NullPointerException

2.1 詳細的異常信息

3. 技術(shù)方面

Java語言中,處理空指針往往是一件很頭疼的事情,一不小心,說不定就搞出個線上Bug,讓你的績效考核拿到3.25。

最近新出的Java14,相信大家都有所耳聞,那么今天就來看看,面對NullPointerException,Java14有哪些更好的處理方式呢?

1.傳統(tǒng)的 NullPointerException

我們編碼過程中呢,經(jīng)常會使用鏈式調(diào)用的方式來寫代碼,這樣寫起來很方便,也很清晰,但是,一旦出現(xiàn)NullPointerException,那就頭大了,因為你很難知道異常是在什么時候開始發(fā)生的。

舉個簡單的例子,就比如下面的代碼,要找到公司某個員工的戶籍所在地,我們這樣來調(diào)用

Stringcity=employee.getDetailInfos().getRegistryAddress().getCity();

在鏈式調(diào)用的過程中,如果employee, getDetailInfos(),或者 getRegistryAddress() 為空,JVM就會拋出 NullPointerException

那么導致異常的根本原因是什么?如果不使用調(diào)試器,很難確定哪個變量為空。而且,JVM也只會打印導致異常的方法、文件名和行號,僅此而已。那么下面,我將帶大家了解Java 14如何通過 JEP 358 解決這個問題。

2.增強型 NullPointerException

SAP在2006年為其商業(yè)JVM實現(xiàn)了增強型的 NullPointerException。2019年2月,它被提議作為OpenJDK社區(qū)的一個增強,之后很快,它成為了一個JEP。所以,該功能在2019年10月完成并在JDK 14版本推出

本質(zhì)上,JEP 358 旨在通過描述某個變量是 “null” 來提高 JVM 生成的 “NullPointerException” 的可讀性。JEP 358通過在方法、文件名和行號旁邊描述為 null 的變量,帶來了一個詳細的 NullPointerException 消息。它通過分析程序的字節(jié)碼指令來工作。因此,它能夠精確地確定哪個變量或表達式是null。最重要的是,JDK 14中默認關(guān)閉詳細的異常消息 。要啟用它,我們需要使用命令行選項:

-XX:+ShowCodeDetailsInExceptionMessages

2.1 詳細的異常信息

考慮在激活 ShowCodeDetailsInExceptionMessages 標志的情況下再次運行代碼:

Exceptioninthread"main"java.lang.NullPointerException:
Cannotinvoke"RegistryAddress.getCity()"becausethereturnvalueof
"com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$DetailInfos.getRegistryAddress()"isnull
atcom.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException.main(HelpfulNullPointerException.java:10)

這一次,從附加信息中,我們知道員工的個人詳細信息丟失的注冊地址導致了我們的異常。從這個增強中獲得的信息可以節(jié)省我們調(diào)試所用的時間。

JVM由兩部分組成詳細的異常消息。第一部分表示失敗的操作,這是引用為 *null* 的結(jié)果,而第二部分標識了 *null* 引用 的原因:

Cannotinvoke"String.toLowerCase()"becausethereturnvalueof"getEmailAddress()"isnull

為了生成異常消息,JEP 358 重構(gòu)了將空引用推送到操作數(shù)堆棧上的部分源代碼。

3. 技術(shù)方面

現(xiàn)在我們已經(jīng)很好地理解了如何使用增強的NullPointerExceptions標識 null 引用,讓我們來看看它的一些技術(shù)方面。

首先,只有當JVM本身拋出一個 NullPointerException 時,才會進行詳細的消息計算,如果我們在Java代碼中顯式拋出異常,則不會執(zhí)行計算。原因是因為:在這些情況下,很可能已經(jīng)在異常構(gòu)造函數(shù)中傳遞了一條有意義的消息。

其次,**JEP 358 ** 懶漢式地計算消息,這意味著只有當我們打印異常消息時才調(diào)用增強的NullPointerException,而不是當異常發(fā)生時就調(diào)用。因此,對于通常的JVM流程不應該有任何性能影響,在那里我們可以捕獲并重新拋出異常,因為咱并不會只想打印異常消息。

最后,詳細的異常消息可能包含源代碼 中的局部變量名。因此,我們可以認為這是一個潛在的安全風險。但是,只有在運行使用激活的 -g 標記編譯的代碼時,才會發(fā)生這種情況,該標記會生成調(diào)試信息并將其添加到類文件中。請考慮一個簡單的示例,我們已編譯該示例以包含以下附加調(diào)試信息:

Employeeemployee=null;
employee.getName();

當執(zhí)行以上代碼時,異常信息中會打印本地變量名稱:

"com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$Employee.getName()"
because"employee"isnull

相反,在沒有額外調(diào)試信息的情況下,JVM 只提供它在詳細消息中所知道的變量:

Cannotinvoke
"com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$Employee.getName()"
because""isnull

JVM 打印編譯器分配的變量索引,而不是本地變量名(employee)。

關(guān)于NullPointerException的處理到這里就結(jié)束了,通過Java14增強的NullPointerException,我們可以很快速的定位代碼問題的原因所在,更快的調(diào)試代碼,節(jié)約時間,提高效率。

已經(jīng)安裝了Java14的朋友可以試試看哦~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2982

    瀏覽量

    106387
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3670

    瀏覽量

    94614
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    70855
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    159

    瀏覽量

    12444

原文標題:Java14 處理 NullPointerException 新方式,真的太香了!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    串級PID為什么需要過零處理?如何進行過零處理

    串級PID為什么需要過零處理?串級PID如何進行過零處理?如何判斷電機是否過機械零點?
    發(fā)表于 06-30 06:48

    STM32處理器的啟動方式是什么?

    STM32處理器的啟動方式是什么?
    發(fā)表于 11-29 07:48

    RK3399處理器與AR9201處理器有哪些不同之處呢

    RK3399處理器與AR9201處理器有哪些不同之處呢?hi3559A處理器與RV1126處理器有哪些不同之處呢?
    發(fā)表于 02-21 07:29

    Sitara AM62處理器的資料分享

    和小型人機界面 (HMI) 應用。TI 將于2022年6月21日至23日在德國紐倫堡的Embedded World展會(215號展位)上展出全新的AM62處理器,并演示適用于邊緣AI和電動汽車充電HMI
    發(fā)表于 11-03 06:11

    Cortex-A9處理器技術(shù)參考手冊

    Cortex-A9處理器是一款高性能、低功耗的ARM宏單元,具有L1緩存子系統(tǒng),可提供完整的虛擬內(nèi)存功能。Cortex-A9處理器實現(xiàn)ARMv7-A架構(gòu),在Jazelle?狀態(tài)下運行32位ARM指令、16位和32位Thumb?指令以及8位
    發(fā)表于 08-02 16:29

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理 現(xiàn)在人們廣泛使用的是由32位微處理器構(gòu)成的計算系統(tǒng),但是32位的計算和操作系統(tǒng)不能支持
    發(fā)表于 03-26 15:07 ?3383次閱讀

    蘋果a6處理器怎么樣_a6處理器參數(shù)

    蘋果正式發(fā)布iphone5,iphone5采用A6處理器,那么A6處理器怎么樣?a6處理器參數(shù)是什么呢?a6處理器四核的嗎?帶著這些疑問,我們來一起了解下A6
    發(fā)表于 09-13 14:29 ?2.6w次閱讀

    A14處理器性能已超酷睿i9處理器,意味著ARM超越Intel嗎?

    蘋果最新發(fā)布的A14處理器性能比去年的A13提升了16%,而去年的A13處理器已與Intel的頂級PC處理器酷睿i9-10920X相當,如此一來A1
    的頭像 發(fā)表于 10-21 10:48 ?7915次閱讀
    A<b class='flag-5'>14</b><b class='flag-5'>處理</b>器性能已超酷睿i9<b class='flag-5'>處理</b>器,意味著ARM超越Intel嗎?

    A14處理器的性能超過酷睿i9處理器,ARM勝出一籌

    蘋果最新發(fā)布的A14處理器性能比去年的A13提升了16%,而去年的A13處理器已與Intel的頂級PC處理器酷睿i9-10920X相當,如此一來A1
    發(fā)表于 10-21 15:07 ?3008次閱讀
    A<b class='flag-5'>14</b><b class='flag-5'>處理</b>器的性能超過酷睿i9<b class='flag-5'>處理</b>器,ARM勝出一籌

    麒麟9000處理器和高通驍龍875處理器相比如何?

    隨著華為mate10系列的發(fā)布,華為最后一代旗艦處理器,麒麟9000也就此亮相,大家對于麒麟9000處理器十分的看好。因為麒麟9000處理器在安兔兔的跑分竟然高達72萬分,較上一代麒麟990
    的頭像 發(fā)表于 11-03 11:31 ?6092次閱讀

    蘋果a14處理器是幾納米_蘋果a14處理器參數(shù)

    蘋果A14處理器制程工藝為5納米!而如今蘋果再次從7納米過渡到5納米制程,在手機性能上再次處于領先地位。要知道,如今芯片制造商在不斷縮小晶體管的規(guī)格,因此制造方面會變得越來越困難。
    的頭像 發(fā)表于 11-19 14:27 ?4.4w次閱讀

    LTM4600處理

    LTM4600處理
    發(fā)表于 05-27 08:34 ?9次下載
    LTM4600<b class='flag-5'>處理</b>

    iPhone14搭載A15處理器亮相

    iPhone14搭載A15處理器亮相
    的頭像 發(fā)表于 09-08 01:55 ?1648次閱讀
    iPhone<b class='flag-5'>14</b>搭載A15<b class='flag-5'>處理</b>器亮相

    驍龍820處理器現(xiàn)在什么水平

    驍龍820處理器現(xiàn)在什么水平 驍龍820處理器是高通公司的一款芯片,于2016年初發(fā)布,并被廣泛應用于當時的高端智能手機中。該芯片采用了14納米工藝制造,擁有CPU、GPU、DSP、ISP等多個
    的頭像 發(fā)表于 08-17 11:46 ?6782次閱讀

    NullPointerException及其產(chǎn)生的場景

    如果一個Java程序到處拋出NullPointerException,那么我們可能會各種吐槽代碼的質(zhì)量。但是我們的項目又經(jīng)常會拋出空指針異常,空指針異常必然常伴Java程序員。為此我們需要了解一些它
    的頭像 發(fā)表于 10-09 17:14 ?975次閱讀
    主站蜘蛛池模板: 国产一级淫 | a黄网站 | 最近高清免费观看视频 | 天天干天天添 | 99国产精品久久久久久久成人热 | 噜噜色小说 | 调教双性学霸美人 | 天堂视频网 | 色丁香影院 | 曰韩一级| 激情综合网五月婷婷 | 欧洲无线区一二区 | 色综色| 一级做a爱 一区 | a在线观看网站 | 在线视频一二三区 | 一区二区三区免费在线 | 精品在线一区二区三区 | 中文天堂最新版在线精品 | 91在线影视| 日日艹| 男人的天堂222eee | 日本经典在线三级视频 | 天堂资源中文在线 | 一级片a| 久99频这里只精品23热 视频 | 一级黄色免费毛片 | 中文字幕在线天堂 | 国产xxxx极品bbw视色 | 在线观看亚洲一区 | 天堂网2021天堂手机版 | 日本黄色高清视频 | 欧美色图俺去了 | 人人干狠狠干 | 国产香蕉视频在线观看 | 日本黄黄| 五月婷婷丁香 | 欧美成人全部免费观看1314色 | 99久久香蕉国产综合影院 | 日韩美女拍拍免费视频网站 | 色视频免费看 |