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

相关推荐
雪隐19 分钟前
个人电脑玩AI00-前言
人工智能·后端
我是一颗柠檬30 分钟前
【Java后端技术亮点】动态路由权限(按钮级权限),细粒度控制到按钮级别
java·开发语言·后端·状态模式
前端Hardy37 分钟前
CSS 动画真的比 JS 快?Josh Comeau 做了组实验,结果跟直觉不一样
前端·javascript·后端
Front思38 分钟前
调取支付宝支付正式环境不可以唤起来,但是沙箱可以
后端
foggyprojects44 分钟前
AI 生成 SQL 模板以后,为什么还需要固定 helper 规则
后端
明天一点1 小时前
Cloudflare 通知转发钉钉机器人
前端·后端
前端Hardy1 小时前
前端日历组件,要变天了?Schedule-X v4.6 彻底杀疯了
前端·javascript·后端
Oo_行者_oO1 小时前
微服务 Feign 从“万能公共服务”到“业务客户端”
后端·架构
wei_shuo1 小时前
别再踩坑了!KingbaseES 存储过程与触发器开发避坑实录
后端
元宝骑士1 小时前
MySQL 实战:跨表排序 + 指定类型置顶四种写法
后端·mysql