異常處理tips

1.場(chǎng)景描述

項(xiàng)目中,有遇到這種異常場(chǎng)景:在一個(gè)循環(huán)中,某一次出現(xiàn)了異常,但是希望程序捕獲異常處理后,繼續(xù)執(zhí)行下去。

這種怎么處理呢?

2.處理方式

2.1錯(cuò)誤方式

try-catch包裹住整個(gè)循環(huán):

@Test
public void testException1() {
    try {
        for (int i = 0; i < 15; i++) {
            // i = 10時(shí),制造一個(gè)算術(shù)異常
            if (i == 10) {
                int j = i / 0;
            }
            System.out.println("第" + i + "次:" + i);
        }
    } catch (ArithmeticException e) {
        logger.info("發(fā)生算術(shù)異常....");
    }
}

執(zhí)行結(jié)果:

第0次:0
第1次:1
第2次:2
第3次:3
第4次:4
第5次:5
第6次:6
第7次:7
第8次:8
第9次:9
00:07:19.091 [main] INFO  cn.no7player.service.UserService - 發(fā)生算術(shù)異常....

Process finished with exit code 0

可以看到:

try-catch包裹住整個(gè)循環(huán)的話,盡管catch語(yǔ)句塊中沒(méi)有拋出異常(拋出異常會(huì)終止程序),只是打印日志,

但是程序依然會(huì)在發(fā)生異常的地方終止。

這種方式,并沒(méi)有起到讓程序在catch異常后繼續(xù)執(zhí)行的作用。

2.2正確方式

try-catch只包裹住可能出問(wèn)題的代碼(本例中就是 if (i=10) 這里)

    @Test
    public void testException2() {
        for (int i = 0; i < 15; i++) {
            try {
                if (i == 10) {
                    int j = i / 0;
                }
            } catch (ArithmeticException e) {
//            throw new Exception("除0異常");
                logger.info("發(fā)生算術(shù)異常....");
            }
            System.out.println("第" + i + "次:" + i);
        }
    }

運(yùn)行結(jié)果:

第0次:0
第1次:1
第2次:2
第3次:3
第4次:4
第5次:5
第6次:6
第7次:7
第8次:8
第9次:9
00:22:57.602 [main] INFO  cn.no7player.service.UserService - 發(fā)生算術(shù)異常....
第10次:10
第11次:11
第12次:12
第13次:13
第14次:14

可以看到:

try-catch只包裹住循環(huán)體內(nèi)可能出問(wèn)題的代碼的話,若該部分出現(xiàn)異常,catch語(yǔ)句塊處理后,仍然可以往下繼續(xù)執(zhí)行try-catch后面的語(yǔ)句。

3.小結(jié)

處理循環(huán)中可能出現(xiàn)的異常時(shí),try-catch的使用范圍應(yīng)該盡量小。

只用try-catch包裹住可能出異常的部分(如算術(shù)運(yùn)算、日期轉(zhuǎn)化等)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容