chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 17:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

其中以下的情況會產(chǎn)生NullPointerException

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

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

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

自動拆箱的NPE

如下代碼中,代碼邏輯出現(xiàn)問題的話,返回就是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;
    ...
}

如果程序中需要如此調(diào)用

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

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

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

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

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

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

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

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

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

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

大部分的源碼中使用的基礎檢查均會檢查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

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

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

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

java -XX:+ShowCodeDetailsInExceptionMessages NPTDemo

使用Java17執(zhí)行如下語句及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)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    7314

    瀏覽量

    93983
  • 代碼
    +關注

    關注

    30

    文章

    4941

    瀏覽量

    73150
  • 應用程序
    +關注

    關注

    38

    文章

    3342

    瀏覽量

    59926
  • null
    +關注

    關注

    0

    文章

    19

    瀏覽量

    4262
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    四種負電壓電源的產(chǎn)生原理及其應用場景

    在系統(tǒng)應用場景中,受限于體積、成本及上電時序等要求,有時僅能采用單一正電源供電。然而,運算放大器、通信接口及傳感器驅(qū)動等模塊的正常運行,往往需要額外配置負電壓供電。本文在深入剖析負電壓產(chǎn)生機理的基礎上,詳細闡述了4種負電壓電源的產(chǎn)生
    的頭像 發(fā)表于 08-16 09:13 ?3539次閱讀
    四種負電壓電源的<b class='flag-5'>產(chǎn)生</b>原理<b class='flag-5'>及其</b>應用<b class='flag-5'>場景</b>

    PCBA焊點氣泡的危害及其產(chǎn)生原因分析

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

    闡述BUCK電路損耗產(chǎn)生及其估算算法

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

    STM32的SPWM產(chǎn)生的原理及其過程是怎樣的

    SPWM的原理和調(diào)制方法是什么?STM32的SPWM產(chǎn)生的原理及其過程是怎樣的?
    發(fā)表于 02-17 07:15

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

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

    超結(jié)理論的產(chǎn)生與發(fā)展及其對高壓MOSFET器件設計的影響

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

    風暖加熱器油煙味產(chǎn)生的原因及其改進方法

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

    超結(jié)理論的產(chǎn)生與發(fā)展及其對高壓MOSFET器件設計的影響

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

    脈沖產(chǎn)生和整形電路典型例題及其講解

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

    脈沖超聲波的產(chǎn)生及其特點

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

    諧波的產(chǎn)生原因及其危害介紹

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

    高頻開關電源中EMI產(chǎn)生的機理及其抑制方法

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

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

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

    Java14處理NullPointerException新方式

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

    負電壓的產(chǎn)生方法和應用場景

    電子電路中,負電壓的產(chǎn)生往往需要特殊配置,但有一種利用運算放大器和地線的簡單方法,將運算放大器配置為反相放大器,輸入端接地,通過調(diào)整電阻和電源電壓的參數(shù),就能得到相對于地線的負輸出電壓。不過這只是負電壓產(chǎn)生的其中一種方式,實際應用中,負電壓的
    的頭像 發(fā)表于 10-16 09:47 ?604次閱讀