0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_ro2CN3Fa ? 來源:CSDN ? 2023-07-31 10:16 ? 次閱讀

1. 使用場景

為什么要把 使用場景 擺在第一個(gè) ?

因?yàn)楸旧韙ry catch 放在 for循環(huán) 外面 和里面 ,如果出現(xiàn)異常,產(chǎn)生的效果是不一樣的。

怎么用,就需要看好業(yè)務(wù)場景,去使用了。

① try catch 在 for 循環(huán) 外面

代碼示例 :

publicstaticvoidtryOutside(){
try{
for(intcount=1;count<=?5;?count++)?{
????????????if?(count?==?3)?{
????????????????//故意制造一下異常
????????????????int?num?=?1?/?0;
????????????}?else?{
????????????????System.out.println("count:"?+?count?+?"?業(yè)務(wù)正常執(zhí)行");
????????????}
????????}
????}?catch?(Exception?e)?{
????????System.out.println("try?catch??在for?外面的情形,?出現(xiàn)了異常,for循環(huán)顯然被中斷");
????}
}

結(jié)果:

79362002-2ec9-11ee-815d-dac502259ad0.png

效果結(jié)論:

try catch 在 for 循環(huán) 外面 的時(shí)候, 如果 for循環(huán)過程中出現(xiàn)了異常, 那么for循環(huán)會終止。

② try catch 在 for 循環(huán) 里面

代碼示例 :

publicstaticvoidtryInside(){
for(intcount=1;count<=?5;?count++)?{
????????try?{
????????????if?(count?==?3)?{
????????????????//故意制造一下異常
????????????????int?num?=?1?/?0;
????????????}?else?{
????????????????System.out.println("count:"?+?count?+?"?業(yè)務(wù)正常執(zhí)行");
????????????}
????????}?catch?(Exception?e)?{
????????????System.out.println("try?catch??在for?里面的情形,?出現(xiàn)了異常,for循環(huán)顯然繼續(xù)執(zhí)行");
????????}
????}
}

結(jié)果:

79580e92-2ec9-11ee-815d-dac502259ad0.png

效果結(jié)論:

try catch 在 for 循環(huán) 里面 的時(shí)候, 如果 for循環(huán)過程中出現(xiàn)了異常,異常被catch抓掉,不影響for循環(huán) 繼續(xù)執(zhí)行。

ps:

在面試的時(shí)候,如果真的連上面這個(gè)在外面在里面使用效果都沒說對,那,真的會去等通知了。

但是 之前不會的看官,看完這一篇, 肯定會了。

2. 性能

時(shí)間上, 其實(shí)算是無差別。

內(nèi)存上, 如果沒出異常,其實(shí)也是無差別。

但是如果出現(xiàn)了異常, 那就要注意了。

注意點(diǎn)是什么 ?看代碼:

我們簡單用

Runtimeruntime=Runtime.getRuntime();
longmemory=runtime.freeMemory();

來統(tǒng)計(jì)一下內(nèi)存消耗情況:

797624cc-2ec9-11ee-815d-dac502259ad0.png

結(jié)論:

也就是說, try catch 放在 for 循環(huán)里面 ,因?yàn)槌霈F(xiàn)異常不會終止 for循環(huán)。所以如果真的存在大批量業(yè)務(wù)處理全是異常,有那么一定的內(nèi)存消耗情況。

如果說代碼沒出錯(cuò)的話, try catch 在 for 里面 和 外面 ,都是幾乎沒區(qū)別的。

為啥, 因?yàn)?異常try catch 其實(shí)一早編譯完就標(biāo)記了 如果從哪兒(from)出現(xiàn)異常,會直接去到(to)的那行代碼去。

Exception table : 當(dāng)前函數(shù)程序代碼編譯涉及到的異常;

type :異常類型;

target:表示異常的處理起始位;

from:表示 try-catch 的開始地址;

to:表示 try-catch 的結(jié)束地址;

7989fc9a-2ec9-11ee-815d-dac502259ad0.png

所以如果不考慮業(yè)出錯(cuò),是否終止循環(huán), 這個(gè)try catch 放里放外沒啥區(qū)別。

3. 個(gè)人看法

其實(shí)就是看業(yè)務(wù)。我需要出現(xiàn)異常就終止循環(huán)的,就放外頭;

不需要終止循環(huán),就搞里頭。

但是要注意一點(diǎn)就是,別在for循環(huán)里面去 查庫調(diào)用第三方啥的,這些操作,如果必要,需要慎重考慮了。(別什么都搞里頭?。。。?/p>





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19100

    瀏覽量

    228814
  • 異常中斷
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    1207

原文標(biāo)題:面試官問我 ,try catch 應(yīng)該在 for 循環(huán)里面還是外面?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    為什么應(yīng)該在SEPIC轉(zhuǎn)換器中使用耦合電感?

    為什么應(yīng)該在SEPIC轉(zhuǎn)換器中使用耦合電感?
    發(fā)表于 02-06 06:58

    電壓跟隨器何時(shí)應(yīng)該在負(fù)反饋上接電阻?

    請問: 1、電壓跟隨器何時(shí)應(yīng)該在負(fù)反饋上接電阻? 2、單電源供電時(shí),提供偏置的分壓電阻其阻值如何選擇? 3、綜合問題1和2,針對單電源供電的電壓跟隨器應(yīng)用,是否需要增加負(fù)反饋電阻,以平衡(抵消)輸入偏置電流的影響。 注:+3.3V供電,目標(biāo)OP器件OPA357。
    發(fā)表于 09-18 08:28

    DAQmx配置是放在最外面循環(huán)外面還是里面

    大家好,我是第一次使用NI的采集卡,在配置DAQmx進(jìn)行模擬輸入的時(shí)候,不知道是把DAQmx的配置放在最外面循環(huán)還是放在循環(huán)里面(我的程序
    發(fā)表于 06-19 22:17

    應(yīng)該在NVS上安裝常規(guī)VDA嗎?

    之間存在很大差異。您是否會在所有卡上安裝帶有HDX 3D Pro的VDA,還是應(yīng)該在NVS上安裝常規(guī)VDA?如果您有使用Remote PC + HDX 3d pro的經(jīng)驗(yàn),請查看P1000和P2000
    發(fā)表于 09-26 15:28

    在Visual Studio中使用82357A應(yīng)該在源代碼中導(dǎo)入哪些庫?

    親愛的專家,我是使用Visual Studio 2013的新手。現(xiàn)在我嘗試使用82357A GPIB與我的設(shè)備進(jìn)行通信。我搜索谷歌,有關(guān)如何在Vb.net中使用82357A的信息很少。我應(yīng)該在源代碼
    發(fā)表于 11-07 10:06

    請問ddr2匹配電阻應(yīng)該在那里加

    我看了有些人的板在ddr2地址線加匹配電阻,數(shù)據(jù)線不加。有的人在數(shù)據(jù)線加匹配電阻地址線不加,到底應(yīng)該在那里加的,是參考DDR芯片的手冊還是參考TMS320C6748的手冊來做?
    發(fā)表于 01-21 13:50

    請問我是否應(yīng)該在差分對的導(dǎo)線上連接一個(gè)100歐姆的電阻?

    如果我使用電阻分壓器為Spartan 6的3.3V lVDS再生直流電平,我是否還應(yīng)該在差分對的導(dǎo)線上連接一個(gè)100歐姆的電阻?非常感謝。以上來自于谷歌翻譯以下為原文If I use
    發(fā)表于 07-03 10:10

    h文件有何作用?應(yīng)該在那兒包含h文件?

    h文件有何作用?h文件里應(yīng)該有什么?h文件不應(yīng)該有什么?應(yīng)該在那兒包含h文件?
    發(fā)表于 07-15 09:36

    Sqlserver Try Catch時(shí)Catch捕獲到錯(cuò)誤重試一次的方法分享

    使用while重試一次不太好,如果try catch在游標(biāo)里面,這樣的話每個(gè)游標(biāo)記錄都要在try里面執(zhí)行兩次。
    發(fā)表于 11-10 17:44

    stm32f103在RT-thread studio中中斷函數(shù)重寫應(yīng)該在哪個(gè)地方重寫?

    stm32f103在RT-thread studio中中斷函數(shù)重寫應(yīng)該在哪個(gè)地方重寫,為什么我的一直都是重定義?
    發(fā)表于 01-16 16:15

    stm32CubeIDE應(yīng)該在哪里編輯makefile?

    你好我正在使用 stm32Cube IDE。我應(yīng)該在哪里編輯 makefile?
    發(fā)表于 01-31 08:41

    ltc2344的驅(qū)動程序應(yīng)該在哪里下載呢?

    ltc2344的驅(qū)動程序應(yīng)該在哪里下載呢?
    發(fā)表于 12-01 08:21

    應(yīng)該在VR Media Player中尋找什么?

    問題是:用戶應(yīng)該在VR媒體播放器中尋找什么樣的質(zhì)量和收益?對于經(jīng)典視頻播放器,大多數(shù)人確切地知道他們在尋找什么,因?yàn)樗麄兙哂袦y試各種軟件和應(yīng)用程序的長期經(jīng)驗(yàn)。
    的頭像 發(fā)表于 07-06 16:34 ?2391次閱讀

    公司這套架構(gòu)統(tǒng)一處理try...catch真香!

    軟件開發(fā)springboot項(xiàng)目過程中,不可避免的需要處理各種異常,spring mvc 架構(gòu)中各層會出現(xiàn)大量的try {...} catch {...} finally {...} 代碼塊,不僅
    的頭像 發(fā)表于 02-27 10:47 ?450次閱讀

    使用try-catch捕獲異常會影響性能嗎?

    “BB 不如 show code,看到?jīng)], 老王,我把 try-catch 從 for 循環(huán)里面提出來跟在for循環(huán)里面做個(gè)對比跑一下,你猜
    的頭像 發(fā)表于 04-01 11:08 ?1142次閱讀