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

学习改变命运,技术铸就辉煌。

大家好,我是銘,全栈开发程序员。

今天,上班的时候发现一个小问题,try catch 捕获异常的时候,代码放在 for 循环里面和外面是不一样的,现在闲下来了,就好好研究一下它俩到底有啥区别。

使用场景

首先从使用场景来看,

  1. 当 tyr catch 在 for 循环外面时,示例代码如下:
dart 复制代码
    @Test
    public void test2() {
        try {
            for (int num = 1; num <= 5; num++) {
                if (num == 3) {
                    //故意制造一下异常
                    int number = 1 / 0;
                } else {
                    System.out.println("num:" + num + " 业务正常执行");
                }
            }
        } catch (Exception e) {
            System.out.println("try catch  在for 外面的情形, 出现了异常,for循环显然被中断");
        }
    }

当出现异常时,控制台如下:

image-20240125230636350

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

  1. try catch 在 for 循环里面时,示例代码如下:
dart 复制代码
    @Test
    public void test3() {

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

运行代码,控制台如下:

image-20240125234619238

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

性能

从性能上分析,当代码无异常时,时间相差并不大,内存消耗差距也不大,但是,当代码发生异常时,差距就会很明显。

我们用 Runtime 来统计一下内存消耗的情况

ini 复制代码
Runtime runtime = Runtime.getRuntime();
long memory = runtime.freeMemory();

当循环次数比较多时,业务代码比较复杂时,两者之间的时间和内存的消耗差距会非常的大。

总结

try catch 是放在 for 循环里面还是外面,就看业务的需求,如果需要出现异常就终止循环的,就放在外面,不需要终止循环的,就放在里面。

大学C语言、Java、数据结构、离散数学答案+几十本编程电子书 ,免费分享

链接:pan.baidu.com/s/1ES7FZxY-... 提取码:75ol

相关推荐
维克兜率天3 小时前
【维克】ARMA模型:AR与MA的完美结合
后端·restful
是未才4 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
上海安当技术4 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队5 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_431600445 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒6 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635077 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo7 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林8 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘8 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端