自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

try-catch 應(yīng)該寫在 for 循環(huán)里面還是外面?

開發(fā)
因為 try-catch 放在 for 循環(huán)外面或里面,在發(fā)生異常時會有不同的效果。所以需要結(jié)合具體的業(yè)務(wù)場景來考慮。

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

使用場景

因為 try-catch 放在 for 循環(huán)外面或里面,在發(fā)生異常時會有不同的效果。所以需要結(jié)合具體的業(yè)務(wù)場景來考慮。

1. 將 try-catch 放在 for 循環(huán)外面

代碼示例:

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 循環(huán)外面時,如果 for 循環(huán)中發(fā)生異常,那么 for 循環(huán)將會終止。

2. 將 try-catch 放在 for 循環(huán)里面

代碼示例:

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 循環(huán)里面時,如果 for 循環(huán)中發(fā)生異常,異常會被 catch 捕獲,不會影響 for 循環(huán)的繼續(xù)執(zhí)行。

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

性能

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

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) { 
                    // 如果這批數(shù)據(jù)有問題,全部都是異常情況
                    // 這意味著將近 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 循環(huán)里面時,由于異常不會終止 for 循環(huán)。所以如果真的有大量業(yè)務(wù)流程都會發(fā)生異常的場景,那么它會在短時間內(nèi)消耗大量內(nèi)存。如果代碼異常不多,try-catch 放在 for 循環(huán)里面和外面幾乎沒有區(qū)別。

責任編輯:趙寧寧 來源: 程序猿技術(shù)充電站
相關(guān)推薦

2024-05-24 08:59:15

2024-06-25 10:37:11

2020-10-14 12:10:22

Javatry-catch代碼

2024-11-04 08:20:00

try-catch編程

2021-01-28 05:17:01

并發(fā)包JDK

2009-07-21 14:30:38

Scalatry-catch

2025-04-29 08:05:00

JavaScript錯誤處理開發(fā)

2025-02-12 12:00:00

前端try-catchJavaScrip

2024-12-02 11:07:24

Java代碼機制

2024-05-07 07:58:47

C#程序類型

2017-11-02 15:26:10

JavaScriptasync錯誤

2020-05-29 08:14:49

代碼Try-Catch程序員

2022-01-25 12:14:39

面試try-catch代碼

2024-11-13 01:00:18

asyncawait?編程

2020-08-24 13:35:59

trycatchJava

2020-09-27 07:48:40

不用try catch

2009-12-02 19:56:33

PHP中try{}ca

2023-11-13 17:01:26

C++編程

2024-11-14 11:00:05

GolangGo結(jié)構(gòu)體

2023-09-07 07:53:21

JavaScriptGoRust
點贊
收藏

51CTO技術(shù)棧公眾號