0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

try catch应该在for循环里面还是外面?

jf_ro2CN3Fa 来源:CSDN 2023-07-31 10:16 次阅读

1. 使用场景

为什么要把 使用场景 摆在第一个 ?

因为本身try catch 放在 for循环 外面 和里面 ,如果出现异常,产生的效果是不一样的。

怎么用,就需要看好业务场景,去使用了。

① try catch 在 for 循环 外面

代码示例 :

publicstaticvoidtryOutside(){
try{
for(intcount=1;count<= 5; count++) {
            if (count == 3) {
                //故意制造一下异常
                int num = 1 / 0;
            } else {
                System.out.println("count:" + count + " 业务正常执行");
            }
        }
    } catch (Exception e) {
        System.out.println("try catch  在for 外面的情形, 出现了异常,for循环显然被中断");
    }
}

结果:

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

效果结论:

try catch 在 for 循环 外面 的时候, 如果 for循环过程中出现了异常, 那么for循环会终止。

② try catch 在 for 循环 里面

代码示例 :

publicstaticvoidtryInside(){
for(intcount=1;count<= 5; count++) {
        try {
            if (count == 3) {
                //故意制造一下异常
                int num = 1 / 0;
            } else {
                System.out.println("count:" + count + " 业务正常执行");
            }
        } catch (Exception e) {
            System.out.println("try catch  在for 里面的情形, 出现了异常,for循环显然继续执行");
        }
    }
}

结果:

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

效果结论:

try catch 在 for 循环 里面 的时候, 如果 for循环过程中出现了异常,异常被catch抓掉,不影响for循环 继续执行。

ps:

在面试的时候,如果真的连上面这个在外面在里面使用效果都没说对,那,真的会去等通知了。

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

2. 性能

时间上, 其实算是无差别。

内存上, 如果没出异常,其实也是无差别。

但是如果出现了异常, 那就要注意了。

注意点是什么 ?看代码:

我们简单用

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

来统计一下内存消耗情况:

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

结论:

也就是说, try catch 放在 for 循环里面 ,因为出现异常不会终止 for循环。所以如果真的存在大批量业务处理全是异常,有那么一定的内存消耗情况。

如果说代码没出错的话, try catch 在 for 里面 和 外面 ,都是几乎没区别的。

为啥, 因为 异常try catch 其实一早编译完就标记了 如果从哪儿(from)出现异常,会直接去到(to)的那行代码去。

Exception table : 当前函数程序代码编译涉及到的异常;

type :异常类型;

target:表示异常的处理起始位;

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

to:表示 try-catch 的结束地址;

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

所以如果不考虑业出错,是否终止循环, 这个try catch 放里放外没啥区别。

3. 个人看法

其实就是看业务。我需要出现异常就终止循环的,就放外头;

不需要终止循环,就搞里头。

但是要注意一点就是,别在for循环里面去 查库调用第三方啥的,这些操作,如果必要,需要慎重考虑了。(别什么都搞里头!!!)





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18299

    浏览量

    222305
  • 异常中断
    +关注

    关注

    0

    文章

    8

    浏览量

    1179

原文标题:面试官问我 ,try catch 应该在 for 循环里面还是外面?

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    为什么应该在SEPIC转换器中使用耦合电感?

    为什么应该在SEPIC转换器中使用耦合电感?
    发表于 02-06 06:58

    怎么将变量(如const 修饰的变量)统一放到某个地址区域里,应该在什么地方修改?

    怎么将变量(如const 修饰的变量)统一放到某个地址区域里,应该在什么地方修改?
    发表于 02-18 06:22

    DAQmx配置是放在最外面循环外面还是里面

    大家好,我是第一次使用NI的采集卡,在配置DAQmx进行模拟输入的时候,不知道是把DAQmx的配置放在最外面循环还是放在循环里面(我的程序
    发表于 06-19 22:17

    请问AD9361的同步操作应该在哪个阶段执行,是同其他配置一起执行吗?

    如题,关于多片同步,有一个MCS的说明文档,但是有一个疑问,同步操作应该在配置的哪个阶段呢,是在所有的配置结束就才进行同步配置,还是说,在其他配置的过程中就应该进行同步操作,感谢工程师解答
    发表于 08-19 07:06

    应该在NVS上安装常规VDA吗?

    之间存在很大差异。您是否会在所有卡上安装带有HDX 3D Pro的VDA,还是应该在NVS上安装常规VDA?如果您有使用Remote PC + HDX 3d pro的经验,请查看P1000和P2000
    发表于 09-26 15:28

    在Visual Studio中使用82357A应该在源代码中导入哪些库?

    亲爱的专家,我是使用Visual Studio 2013的新手。现在我尝试使用82357A GPIB与我的设备进行通信。我搜索谷歌,有关如何在Vb.net中使用82357A的信息很少。我应该在源代码
    发表于 11-07 10:06

    请问ddr2匹配电阻应该在那里加

    我看了有些人的板在ddr2地址线加匹配电阻,数据线不加。有的人在数据线加匹配电阻地址线不加,到底应该在那里加的,是参考DDR芯片的手册还是参考TMS320C6748的手册来做?
    发表于 01-21 13:50

    请问我是否应该在差分对的导线上连接一个100欧姆的电阻?

    如果我使用电阻分压器为Spartan 6的3.3V lVDS再生直流电平,我是否还应该在差分对的导线上连接一个100欧姆的电阻?非常感谢。以上来自于谷歌翻译以下为原文If I use
    发表于 07-03 10:10

    h文件有何作用?应该在那儿包含h文件?

    h文件有何作用?h文件里应该有什么?h文件不应该有什么?应该在那儿包含h文件?
    发表于 07-15 09:36

    Sqlserver Try CatchCatch捕获到错误重试一次的方法分享

    使用while重试一次不太好,如果try catch在游标里面,这样的话每个游标记录都要在try里面执行两次。
    发表于 11-10 17:44

    stm32f103在RT-thread studio中中断函数重写应该在哪个地方重写?

    stm32f103在RT-thread studio中中断函数重写应该在哪个地方重写,为什么我的一直都是重定义?
    发表于 01-16 16:15

    stm32CubeIDE应该在哪里编辑makefile?

    你好我正在使用 stm32Cube IDE。我应该在哪里编辑 makefile?
    发表于 01-31 08:41

    ltc2344的驱动程序应该在哪里下载呢?

    ltc2344的驱动程序应该在哪里下载呢?
    发表于 12-01 08:21

    应该在VR Media Player中寻找什么?

    问题是:用户应该在VR媒体播放器中寻找什么样的质量和收益?对于经典视频播放器,大多数人确切地知道他们在寻找什么,因为他们具有测试各种软件和应用程序的长期经验。
    的头像 发表于 07-06 16:34 2171次阅读

    使用try-catch捕获异常会影响性能吗?

    “BB 不如 show code,看到没, 老王,我把 try-catch 从 for 循环里面提出来跟在for循环里面做个对比跑一下,你猜
    的头像 发表于 04-01 11:08 849次阅读