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

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

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

3天內不再提示

NullPointerException及其產生的場景

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 17:14 ? 次閱讀

如果一個Java程序到處拋出NullPointerException,那么我們可能會各種吐槽代碼的質量。但是我們的項目又經常會拋出空指針異常,空指針異常必然常伴Java程序員。為此我們需要了解一些它嘍,NullPointerException是Java中一個常見的RuntimeException,正如阿里的Java開發手冊所說,對于Java程序員來說防止NPE是一種基本素養。今天我們盤一下NullPointerException。

1 NullPointerException以及其產生的場景

Java中定義:在應用程序中嘗試使用null時會拋出異常。

其中以下的情況會產生NullPointerException

  1. 調用空對象的方法,
  2. 訪問或者修改對象的字段值時
  3. 獲取一個空對象(數組)的長度時,
  4. 修改或者回取null數組的一個元素或者值時
  5. 拋出異常時,拋出null。

以上是針對各種具體發生異常的情況,而對于日常使用過程中,可能拋出空指針異常的情景非常多,我們常用的手冊中提到了以下幾種NPE產生的實際使用場景。

  • 返回類型為基本數據類型,return包裝數據類型的對象時,自動拆箱有可能產生NPE。
  • 數據庫的查詢結果可能為null。
  • 集合里的元素即使isNotEmpty,取出的數據元素也可能為null。
  • 遠程調用返回對象時,一律要求進行空指針判斷,防止NPE。
  • 對于Session中獲取的數據,建議進行NPE檢查,避免空指針。
  • 級聯調用obj.getA().getB().getC();一連串調用,易產生NPE。

自動拆箱的NPE

如下代碼中,代碼邏輯出現問題的話,返回就是null。

public int count(){
    Integer integer = null;
    。。。。。。
    return integer;
}

同理如下代碼也是同樣的問題,均屬于自動拆裝箱時的NPE問題。

public static Boolean callSuccess(){
    return null;

};

從集合取出的值直接使用會遇到NPE.

Map< String,String > map= new HashMap<  >();
map.get("test").equals("test");

2 NPE處理以及如何避免

一般程序中需要處理NPE的地方隨處可見,常見的NPE預防介紹如下幾種方法。

2.1 如果是鏈式get這種推薦使用Optional進行處理

如下代碼

public class Department {
    private String departmentName;
    private Company company;
    ...
}
public class Group {
    private Department department;
    ...
}
public class Employee {
    private String staffName;
    private Group group;
    ...
}

如果程序中需要如此調用

employee.getGroup().getDepartment().getDepartmentName();

那么每一處均可能出現NullPointerException,如果我們寫成下面這樣。

if (employee != null){
    if(employee.getGroup() != null){
        if(employee.getGroup().getDepartment() != null){
            String departmentName =    employee.getGroup().getDepartment().getDepartmentName();
        }
    }
}

if嵌套大軍來襲,爾等還不下馬受死。

上述if嵌套看起來的確很不美觀,使用Optional可以比較容易的避免這些if判斷,代碼也會優雅不少。

下面不管哪一層為null返回均為Default。

String s = Optional.ofNullable(employee)
        .map(Employee::getGroup)
        .map(Group::getDepartment)
        .map(Department::getDepartmentName).orElse("Default");

或者使用如下方法,如果某一層為null則返回Supplier的執行結果。

String s1 = Optional.ofNullable(employee)
        .map(Employee::getGroup)
        .map(Group::getDepartment)
        .map(Department::getDepartmentName).orElseGet(() - > {
            return "Supplier default";
        });

2.2 主動進行參數檢查,對方法中傳入的參數進行檢驗

大部分的源碼中使用的基礎檢查均會檢查null

public static String testString(String str) throws Exception {
    if (str == null){
        throw new Exception("param can't be null");
    }
    return str;
}

2.3 在已知字符串上使用equals(),equalsIgnoreCase()等方法。

"knownObject".equals(unknownObject)

2.4 盡量避免方法中返回null

一些返回數組或者List的方法,如果沒有值,盡量返回空集合,避免返回null。

2.5 新版本中Java輸出的NullPointException詳細信息

Java14 可以使用增強異常信息來查看NullPointerException的詳細錯誤信息。Java17已經默認開啟。

java -XX:+ShowCodeDetailsInExceptionMessages NPTDemo

使用Java17執行如下語句及NullPointException的輸出

Map< String,String > map= new HashMap<  >();
map.get("test").equals("test");
E:Javajdk-17.0.1bin >java NPTDemo
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "java.util.Map.get(Object)" is null
        at NPTDemo.main(NPTDemo.java:24)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7030

    瀏覽量

    89034
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68612
  • 應用程序
    +關注

    關注

    37

    文章

    3268

    瀏覽量

    57705
  • null
    +關注

    關注

    0

    文章

    19

    瀏覽量

    3974
收藏 人收藏

    評論

    相關推薦

    PCBA焊點氣泡的危害及其產生原因分析

    PCBA焊點氣泡(空洞)的危害及其產生原因分析
    的頭像 發表于 01-05 14:18 ?1655次閱讀
    PCBA焊點氣泡的危害<b class='flag-5'>及其</b><b class='flag-5'>產生</b>原因分析

    闡述BUCK電路損耗產生及其估算算法

    PART1:前言本文以一個12V-2.5V/2A的DC-DC電源為例,闡述BUCK電路損耗產生及其估算算法。先做以下幾點聲明:1、開關電源的主功率開關管的工作區域:開區和關區,實際上是線性區
    發表于 07-27 07:55

    STM32的SPWM產生的原理及其過程是怎樣的

    SPWM的原理和調制方法是什么?STM32的SPWM產生的原理及其過程是怎樣的?
    發表于 02-17 07:15

    是否有任何針對 EVK 的測試套件或針對各種平臺及其相關場景的各自出廠配置值?

    對于各種 IMX 系列處理器 (IMX 3/5/6),在 SD/MNC 主機控制器中可以實現的最大有效吞吐量是多少? 是否有任何針對 EVK 的測試套件或針對各種平臺及其相關場景的各自出廠配置值?
    發表于 06-05 06:27

    超結理論的產生與發展及其對高壓MOSFET器件設計的影響

    摘 要: 對超結理論的產生背景及其發展過程進行了介紹。以應用超結理論的COOLMOSTM 器件為例,介紹了超結器件的工作原理、存在的缺點以及提出的改進方法;并對其他基于超結
    發表于 11-14 15:32 ?0次下載

    風暖加熱器油煙味產生的原因及其改進方法

    簡要介紹風暖加熱器油煙味產生的原因及其改進方法。關鍵詞: 加熱器; 油煙味; 產生原因; 改進方法Abstract: The author briefly introduces the causes that the heate
    發表于 07-25 09:40 ?22次下載

    超結理論的產生與發展及其對高壓MOSFET器件設計的影響

    超結理論的產生與發展及其對高壓MOSFET器件設計的影響:對超結理論的產生背景及其發展過程進行了介紹。以應用超結理論的COOLMOSTM 器件為例,介紹了超結器件的工作原理、存在的缺
    發表于 12-13 19:57 ?31次下載

    緩慢加燈絲技術的應用及其產生的經濟效益

    緩慢加燈絲技術的應用及其產生的經濟效益:對于使用大功率電子管發射臺來講,由于電子管的特點是功率大、線性好。但是它的不足是耗電量大,使用壽命短,價格昂貴。往往一
    發表于 12-15 10:21 ?19次下載

    脈沖產生和整形電路典型例題及其講解

    脈沖產生和整形電路典型例題及其講解 例6.1 用集成芯片555構成的施密特觸發器電路及輸入波形Vi如圖6.3(a、b)所示,試畫出對應的輸出波形Vo
    發表于 04-22 16:53 ?42次下載

    脈沖超聲波的產生及其特點

    脈沖超聲波的產生及其特點 用于產生和接收超聲波的材料一
    發表于 11-24 14:53 ?7693次閱讀
    脈沖超聲波的<b class='flag-5'>產生</b><b class='flag-5'>及其</b>特點

    諧波的產生原因及其危害介紹

    諧波的產生及其危害介紹 一、概述    在理想的情況下,優質的電力供應應該提供具有正弦波形的電壓。但在實際中供電電壓的波形會由于某些原因而偏離正弦波形
    發表于 04-08 17:44 ?1.5w次閱讀

    高頻開關電源中EMI產生的機理及其抑制方法

    本文從開關電源的電路結構、器件進行分析,探討了電磁干擾產生的機理及其抑制方法。
    發表于 07-12 15:10 ?5015次閱讀
    高頻開關電源中EMI<b class='flag-5'>產生</b>的機理<b class='flag-5'>及其</b>抑制方法

    永磁同步電機直接轉矩控制轉矩脈動的產生及其抑制方法綜述

    永磁同步電機直接轉矩控制轉矩脈動的產生及其抑制方法綜述
    發表于 01-21 12:00 ?2次下載

    Java14處理NullPointerException新方式

    1.傳統的 NullPointerException 2.增強型 NullPointerException 2.1 詳細的異常信息 3. 技術方面 在Java語言中,處理空指針往往是一件很頭疼的事情
    的頭像 發表于 10-11 17:56 ?820次閱讀

    FPGA和ASIC的概念、基本組成及其應用場景 FPGA與ASIC的比較

      FPGA和ASIC都是數字電路的實現方式,但它們有不同的優缺點和應用場景。本文將以通俗易懂的方式解釋FPGA和ASIC的概念、基本組成、及其應用場景。
    發表于 08-14 16:37 ?2275次閱讀
    主站蜘蛛池模板: 天天色官网| 午夜黄网站| 美女丝袜长腿喷水gif动态图| 手机在线看福利| 国产综合成色在线视频| 看黄视频网站| 国产成人精品亚洲日本在线观看| 亚洲男人精品| 日本不卡视频| 在厨房乱子伦在线观看| 中文字幕第一页在线| 四虎永久在线精品免费影视 | 最近2018中文字幕免费看手机| 日本高清中文字幕在线观穿线视频| 久久国产精品99精品国产987| 99婷婷| 老司机狠狠k免费毛片| xxxx日本xx| 五月综合激情视频在线观看| 女人大毛片一级毛片一| 999av视频| 亚洲一区日本| 四虎网站| 大乳妇女bd视频在线观看| 精品一区二区在线观看| 深夜福利欧美| 九九涩| 欧美xxxxxxxxx| 午夜三级国产精品理论三级| www四虎影视| 欧美极品bbbbⅹxxxx| 日本一二区视频| 麻豆美女大尺度啪啪| 天天视频免费入口| ⅹxxxx68日本老师hd| 欧美性生交xxxxx久久久| 五月天婷婷在线观看视频| h在线国产| 美女视频网站色软件免费视频| 成人深夜视频| 性欧美xxx 不卡视频|