摘要:問題描述重構(gòu)計量項目后臺,運行單元測試時,遇到了錯誤。是基本數(shù)據(jù)類型,默認(rèn)值為為類類型,默認(rèn)值為。運行單元測試,通過總結(jié)有時候,很多奇奇怪怪的問題,往往都有很簡單的解釋,只是我們一時沒想到。
問題描述
重構(gòu)計量項目后臺,運行單元測試時,遇到了錯誤。
第145行:
又沒有在null上調(diào)方法,兩個Double相乘,怎么會空指針呢?
嘗試打開IDEA新建一個普通的Java項目。
doublepackage com.mengyunzhi; public class Main { double testDouble; private void test() { System.out.println(testDouble); double result = testDouble * 10; } public static void main(String[] args) { Main main = new Main(); main.test(); } }
運行結(jié)果:
Doublepackage com.mengyunzhi; public class Main { Double testDouble; private void test() { System.out.println(testDouble); Double result = testDouble * 10; } public static void main(String[] args) { Main main = new Main(); main.test(); } }
運行結(jié)果:
分析看了兩個運行結(jié)果,大體應(yīng)該就能分析出來原因了。
Double是double的包裝類。double是基本數(shù)據(jù)類型,默認(rèn)值為0.0;Double為類類型,默認(rèn)值為null。
就像將Double對象賦值給基本類型double時,是不會報錯的,因為有一層隱式調(diào)用,將Double轉(zhuǎn)化為double。
而我猜想這里的空指針應(yīng)該也和這個有關(guān)系,對象是沒法乘的,所以隱式調(diào)用轉(zhuǎn)化為double,然后再運算。
因為沒有初始化,所以Double對象默認(rèn)是null,在null隱式調(diào)用方法,所以就空指針異常。
解決實例化的時候維護(hù)上倍數(shù)。
運行單元測試,通過!
總結(jié)有時候,很多奇奇怪怪的問題,往往都有很簡單的解釋,只是我們一時沒想到。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71689.html
摘要:不久前發(fā)現(xiàn)有一個第三方庫可以在一定程度上幫助我們從體力勞動中解救出來,它就是。來看自動生成的方法中對于數(shù)組采用的是。檢查傳入對象是否為,若為,則拋出異常。比如自動拋受檢異常,而無需顯式在方法上使用語句。 前言 Laziness is a virtue!每當(dāng)寫pojo類時,都會重復(fù)寫一些setter/getter/toString方法等大量的模版代碼,無聊繁瑣卻又不得不做,這會讓這個類變...
摘要:案例演示該句運行時發(fā)生了數(shù)組索引越界異常,由于沒有處理異常,導(dǎo)致程序無法繼續(xù)執(zhí)行,程序結(jié)束。用來進(jìn)行某種異常的捕獲,實現(xiàn)對捕獲到的異常進(jìn)行處理。運行時期異常一旦發(fā)生需要程序人員修改源代碼。 01異常的概述 * A: 異常的概述 * a:什么是異常 * Java代碼在運行時期發(fā)生的問題就是異常。 * b:異常類 * 在Java中,把異常信息...
摘要:在中存在兩種類型基本類型和引用類型。值得注意的是,基本類型的值的狀態(tài)不會被共享。浮點類型和它們的值中的浮點類型遵循標(biāo)準(zhǔn)的定義。布爾類型和它們的值類型表示兩個邏輯量,和。 眾所周知,Java是一門靜態(tài)類型的語言,這意味著所有的變量和表達(dá)式的類型會在編譯時確定。同時,Java 還是一門強類型的語言,因此變量的值或表達(dá)式的結(jié)果的類型都會受到限制(比如一個聲明為 String 的變量不的值不可...
摘要:每個用的孩子都應(yīng)該了解下主要依賴編譯時代碼生成技術(shù),幫你自動生成基于模板的常用的代碼,譬如最常見的與。另一種是通過類似于這樣基于注解的在運行時利用反射動態(tài)添加,不過這樣的缺陷是會影響性能,并且有一定局限性。 Lombok 每個用Java的孩子都應(yīng)該了解下Lombok Lombok主要依賴編譯時代碼生成技術(shù),幫你自動生成基于模板的常用的Java代碼,譬如最常見的Getter與Setter...
摘要:使用方法能以簡單的注解形式來簡化代碼,提高開發(fā)人員的開發(fā)效率。能通過注解的方式,在編譯時自動為屬性生成構(gòu)造器方法。出現(xiàn)的神奇就是在源碼中沒有和方法,但是在編譯生成的字節(jié)碼文件中有和方法。沒法實現(xiàn)多種參數(shù)構(gòu)造器的重載。 1 Lombok背景介紹 官方介紹如下: Project Lombok makes java a spicier language by addi...
閱讀 3533·2023-04-25 19:42
閱讀 1545·2021-11-23 10:11
閱讀 2554·2021-11-16 11:51
閱讀 1745·2019-08-30 15:54
閱讀 2194·2019-08-29 18:44
閱讀 1807·2019-08-23 18:24
閱讀 633·2019-08-23 17:52
閱讀 1947·2019-08-23 15:33