亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java14對于NullPointerException的新處理方式示例解析

 更新時間:2023年09月12日 10:59:53   作者:Java后端技術(shù)  
這篇文章主要為大家介紹了Java14對于NullPointerException的新處理方式示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

最近新出的Java14,相信大家有所耳聞,面對NullPointerException,Java14有哪些更好的處理方式呢?

1、傳統(tǒng)的NullPointerException

在編碼過程中,經(jīng)常會用到鏈式的調(diào)用方式來寫代碼,方便清晰,但是一旦出現(xiàn)NullPointerException,就頭大了。因為很難知道異常在什么時候發(fā)生。舉個例子:

String city = employe.getDetailInfo().getAddress().getCity();

在鏈式調(diào)用過程中,如果 employee,getDetailInfo(),或者getAddress()為空,JVM就會拋出NullPointerExeption,那么導致異常的根本原因是什么?如果不使用調(diào)試器,我們很難確認哪個變量為空。而JVM也只會打印導致異常的方法、文件名和行號。

2、增強型 NullPointerException

SAP在2006年為商業(yè)JVM實現(xiàn)了增強型的NullPointerException。2019年,被提議作為一個OpenJDK社區(qū)的增強。本質(zhì)上JEP 358通過描述某個變量是"null"來提高JVM生成"NullPointerException"的可讀性。通過在方法、文件名和行號旁邊描述為null的變量,帶來一個詳細的NullPointerException消息。通過分析程序的字節(jié)碼指令來工作,因此能夠準確的定位到哪個變量或者表達式為null。

在Java14中,默認是關(guān)閉詳細的異常消息的。

要啟用,需要配置:

-xx:+showCodeDeatilsInExceptionMessages

2.1 詳細的異常信息考慮在激活showCodeDeatilsInExceptionMessages標志的情況下再次運行代碼,從附加信息中,可以看到具體的空指針的類,來節(jié)省我們調(diào)試所用的時間。

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

Cannot invoke "String.toLowerCase()" because the return value of "getEmailAddress()" is null

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

3 技術(shù)方面

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

其次,JEP 358懶漢式的計算消息,這意味著只有當我們打印異常消息的時候,才調(diào)用增強的NullPointerException,而不是當異常發(fā)生時就調(diào)用。因此對于通常的JVM流程不應(yīng)該有任何性能影響。

最后,詳細的異常信息可能包含源代碼中的局部變量名。因此我們認為這是一個潛在的安全風險。但是只有運行使用激活的-G標記編譯的代碼時,才會發(fā)生這樣的情況。

Employee employee = null;
employee.getName();

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

"com.xxx.xxx.xxx$Employee.getName()"
because "employee" is null

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

Cannot invoke
 "com.xxx.xxx.xxx$Employee.getName()"
because "<locall>" is null

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

通過Java14增強型的NullPointerException,我們可以很快定位出代碼問題所在,更快的調(diào)試代碼,提高效率。

以上就是Java14對于NullPointerException的新處理方式示例解析的詳細內(nèi)容,更多關(guān)于Java NullPointerException的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組

    Java如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組

    這篇文章主要介紹了Java如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java中有關(guān)構(gòu)造方法中的輸出

    java中有關(guān)構(gòu)造方法中的輸出

    這篇文章主要介紹了java中有關(guān)構(gòu)造方法中的輸出,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解Java回調(diào)的原理與實現(xiàn)

    詳解Java回調(diào)的原理與實現(xiàn)

    回調(diào)函數(shù),顧名思義,用于回調(diào)的函數(shù)。回調(diào)函數(shù)只是一個功能片段,由用戶按照回調(diào)函數(shù)調(diào)用約定來實現(xiàn)的一個函數(shù)?;卣{(diào)函數(shù)是一個工作流的一部分,由工作流來決定函數(shù)的調(diào)用(回調(diào))時機。
    2017-03-03
  • Java模擬實現(xiàn)QQ三方登錄(單點登錄2.0)

    Java模擬實現(xiàn)QQ三方登錄(單點登錄2.0)

    這篇文章主要為大家詳細介紹了Java模擬實現(xiàn)QQ三方登錄,單點登錄2.0,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Spark-Sql入門程序示例詳解

    Spark-Sql入門程序示例詳解

    Spark?SQL?作為?Spark?四大核心組件之一,主要用于處理結(jié)構(gòu)化數(shù)據(jù)或半結(jié)構(gòu)化數(shù)據(jù),它支持在Spark?中使用?SQL?對數(shù)據(jù)進行查詢,本文給大家介紹Spark-Sql入門程序,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    這篇文章主要介紹了Spring?cloud?實現(xiàn)房源查詢功能,本項目是一個多模塊項目,創(chuàng)建一個 Spring Initializr 項目 不自動添加依賴項,完成創(chuàng)建后刪除自帶的src目錄,并在根目錄下創(chuàng)建新的maven模塊,需要的朋友可以參考下
    2022-09-09
  • Mybatis自定義Sql模板語法問題

    Mybatis自定義Sql模板語法問題

    這篇文章主要介紹了Mybatis自定義Sql模板語法問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明

    java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明

    這篇文章主要介紹了java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java多線程面試題(面試官常問)

    Java多線程面試題(面試官常問)

    這篇文章主要介紹了Java多線程面試題(面試官常問),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot啟動時沒有日志的原因分析

    springboot啟動時沒有日志的原因分析

    這篇文章主要介紹了springboot啟動時沒有日志的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論