成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

try-catch 應該寫在 for 循環里面還是外面?

開發
因為 try-catch 放在 for 循環外面或里面,在發生異常時會有不同的效果。所以需要結合具體的業務場景來考慮。

其實這個問題的答案不是說放在里面或者外面就一定更好,或者說哪個不好。這需要結合具體的使用場景來回答。

使用場景

因為 try-catch 放在 for 循環外面或里面,在發生異常時會有不同的效果。所以需要結合具體的業務場景來考慮。

1. 將 try-catch 放在 for 循環外面

代碼示例:

public static void outside() {
    try {
        for (int count = 1; count <= 4; count++) {
            if (count == 3) {
                // 故意制造一個異常
                int num = count / 0;
            } else {
                System.out.println("success,count:" + count);
            }
        }
    } catch (Exception e) {
        System.out.println("An exception occurs.");
    }
}

輸出:

success,count:1
success,count:2
An exception occurs.

很明顯,當 try-catch 放在 for 循環外面時,如果 for 循環中發生異常,那么 for 循環將會終止。

2. 將 try-catch 放在 for 循環里面

代碼示例:

public static void tryInside() {
    for (int count = 1; count <= 4; count++) {
        try {
            if (count == 3) {
                // 故意制造一個異常
                int num = count / 0;
            } else {
                System.out.println("success,count:" + count);
            }
        } catch (Exception e) {
            System.out.println("An exception occurs.");
        }
    }
}

輸出:

success,count:1
success,count:2
An exception occurs.
success,count:4

當 try-catch 在 for 循環里面時,如果 for 循環中發生異常,異常會被 catch 捕獲,不會影響 for 循環的繼續執行。

如果在面試中,連上面提到的放在外面或里面的使用效果都沒搞清楚,那真的可以等通知了。接下來,咱們討論一下性能方面的差異。

性能

在時間方面,實際上沒有區別。在內存使用方面,如果沒有異常,也沒有區別。但如果發生異常,那就需要注意了。需要注意什么呢?看下面的代碼:

public class TryCatchDemo {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        long startMemory = runtime.totalMemory() - runtime.freeMemory();
        for (int i = 0; i < 100000; i++) {
            try {
                if (i > 2) { 
                    // 如果這批數據有問題,全部都是異常情況
                    // 這意味著將近 10 萬個異常將會被拋出
                    int num = i / 0; 
                } else {
                    System.out.println("success,i:" + i);
                }
            } catch (Exception e) {
                System.out.println("An exception occurs.");
            }
        }
        long endMemory = runtime.totalMemory() - runtime.freeMemory();
        long memoryUsed = endMemory - startMemory;
        System.out.println("memoryUsed:" + memoryUsed + "byte");
    }
}

輸出:

An exception occurs.
An exception occurs.
An exception occurs.
An exception occurs.
An exception occurs.
An exception occurs.
memoryUsed:11507104byte

可以看出,當 try-catch 放在 for 循環里面時,由于異常不會終止 for 循環。所以如果真的有大量業務流程都會發生異常的場景,那么它會在短時間內消耗大量內存。如果代碼異常不多,try-catch 放在 for 循環里面和外面幾乎沒有區別。

責任編輯:趙寧寧 來源: 程序猿技術充電站
相關推薦

2020-10-14 12:10:22

Javatry-catch代碼

2024-06-25 10:37:11

2024-05-24 08:59:15

2024-11-04 08:20:00

try-catch編程

2021-01-28 05:17:01

并發包JDK

2009-07-21 14:30:38

Scalatry-catch

2025-04-29 08:05:00

JavaScript錯誤處理開發

2025-02-12 12:00:00

前端try-catchJavaScrip

2024-12-02 11:07:24

Java代碼機制

2024-05-07 07:58:47

C#程序類型

2020-05-29 08:14:49

代碼Try-Catch程序員

2017-11-02 15:26:10

JavaScriptasync錯誤

2022-01-25 12:14:39

面試try-catch代碼

2024-11-13 01:00:18

asyncawait?編程

2020-09-27 07:48:40

不用try catch

2020-08-24 13:35:59

trycatchJava

2009-12-02 19:56:33

PHP中try{}ca

2023-11-13 17:01:26

C++編程

2024-11-14 11:00:05

GolangGo結構體

2021-03-31 11:52:24

try-catch-fJava代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99re免费| 天天搞夜夜操 | 国产精品美女久久久久久久网站 | 欧洲精品码一区二区三区免费看 | 亚洲欧美日韩激情 | 久久综合色综合 | 韩日精品在线观看 | 久久免费国产 | 欧美激情 一区 | 日韩精品一区二区三区免费观看 | 色婷婷久久久亚洲一区二区三区 | av香蕉 | 欧产日产国产精品v | 涩涩视频网站在线观看 | www.欧美视频 | 中文在线观看视频 | 中文字幕国 | 女人精96xxx免费网站p | 亚洲综合精品 | 日本久久久一区二区三区 | 久久久www成人免费无遮挡大片 | 欧美www在线| 色婷婷久久久久swag精品 | 成人欧美一区二区三区黑人孕妇 | 国产精品99久久久久久久vr | 国产在线一区二区三区 | 国产精品一区二区在线 | 国产成人免费视频 | 99re6在线| 中文字幕亚洲一区二区三区 | 亚洲欧美日韩久久久 | 欧美一区二区三区在线播放 | 久久国产精品久久 | 国产成人在线一区二区 | 久久亚洲精品国产精品紫薇 | 欧美片网站免费 | 综合在线视频 | 美女视频一区二区三区 | 久草福利 | 超碰97免费 | 伊人激情网 |