第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何捕獲空數(shù)組 [0](異常)

如何捕獲空數(shù)組 [0](異常)

元芳怎么了 2023-03-23 16:12:14
我目前正在準(zhǔn)備考試并正在執(zhí)行以下任務(wù):我想捕獲“ArrayIndexOutOfBoundsException”。我有以下課程:class Util {    // get the smallest number of the given array    @SuppressWarnings("unused")    public static int minimum(int[] values) {        try {            int min = values[0];            if (values == null) {                throw new NullPointerException();            }            if (values.length > 0) {                for (int i = 1; i < values.length; i++) {                    if (values[i] < min) {                        min = values[i];                    }                }                return min;            } else {                throw new ArrayIsEmptyException();            }        } catch (NullPointerException e) {            System.out.println("Das ist kein Array");        } catch (ArrayIsEmptyException e) {            System.out.println("Das Array ist leer.");        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return 0;    }從主要:public class UtilTest {    // Testprogramm    public static void main(String[] args) {        System.out.println("Die kleinste Zahl ist: " + Util.minimum(new int[] { 1, 6, 4, 7, -3, 2 }));        System.out.println("Die kleinste Zahl ist: " + Util.minimum(new int[0]));        System.out.println(Util.minimum(null));    }}我怎樣才能捕捉到這個(gè)輸出的異常:System.out.println("Die kleinste Zahl ist: " + Util.minimum(new int[0]));感謝您的幫助!
查看完整描述

1 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

當(dāng)發(fā)生錯(cuò)誤時(shí),代碼立即跳出。


在您的代碼中,您正在做的事情在某些情況下會導(dǎo)致錯(cuò)誤(例如,如果數(shù)組變量沒有指向任何內(nèi)容(為空),或者它是否為空數(shù)組),然后您檢查這些條件,毫無意義。


這就像先過馬路,然后檢查是否有汽車駛來。您要么在檢查交通情況之前就已經(jīng)遇到路障,要么如果您已經(jīng)安全地過馬路,檢查現(xiàn)在就沒有意義了。


所以,換個(gè)角度吧。


具體來說,這段代碼:int min = values[0];


將拋出NullPointerExceptionif valuesis null,并將拋出ArrayIndexOutOfBoundsExceptionif valuesis an empty array。


更一般地說,這個(gè):


catch (Exception e) {

    e.printStackTrace();

}

是非常糟糕的代碼。對于初學(xué)者來說,這意味著代碼會在錯(cuò)誤發(fā)生后繼續(xù)運(yùn)行,因此通常您的日志中會充滿大量錯(cuò)誤消息,即使有一件事情出錯(cuò)了,更重要的是,異常包含 5 個(gè)有用的信息:它的類型、它的消息、它的堆棧跟蹤、它的因果鏈和附加到它的一批被抑制的異常。


最后一個(gè)通常不是特別有趣,但其他 4 個(gè)非常有用。你扔掉了 4 個(gè)有用的東西中的 3 個(gè),只打印堆棧跟蹤。除此之外,你還在到處重復(fù)這種風(fēng)格的代碼。


所以不要。


永遠(yuǎn)不要編寫捕獲異常的代碼只是為了記錄或打印它。只是.. 不要抓住它,讓頂級異常處理程序(它打印所有有用的信息然后關(guān)閉線程,這是一個(gè)很好的默認(rèn)設(shè)置)處理它。如果是已檢查異常,則添加throws X到方法簽名中,其中 X 是已檢查異常。例如:


好的代碼:


public void deleteFile(String fileName) throws IOException {

    Files.delete(Paths.get(fileName));

}

錯(cuò)誤代碼:


public void deleteFile(String fileName) {

    try {

        Files.delete(Paths.get(fileName));

    } catch (IOException e) {

        System.err.println("Something went wrong deleting file!");

        e.printStackTrace();

    }

}

第二段代碼:

  1. 打印無用信息(“出了點(diǎn)問題”,是的,我知道,我正在查看異常)

  2. 使用糟糕的風(fēng)格;感嘆號在錯(cuò)誤消息中沒有用。

  3. 代碼靜默繼續(xù),因此任何調(diào)用此方法的代碼都無法判斷刪除是否失敗。也可能會出現(xiàn)更多錯(cuò)誤

  4. 丟棄大量信息;IOException 可能有一條消息,例如“文件被標(biāo)記為只讀”,您現(xiàn)在已經(jīng)將其丟棄。

  5. 更長

這只是它出了什么問題的一個(gè)例子。


查看完整回答
反對 回復(fù) 2023-03-23
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號