面试官问我 ,try catch 应该在 for 循环里面还是外面?

互联网架构师

共 4837字,需浏览 10分钟

 ·

2024-03-21 00:30

点击关注公众号:互联网架构师,后台回复   2T 获取 2TB 学习资源! 上一篇:2T架构师学习资料干货分享 大家好,我是互联网架构师!
    
        前言
      
    

有个老哥昨天被面试官欺负了,但是是被这个问题(标题)欺负的?

其实是个比较基础的问题,只要有了解过,叙述是非常简单OK的。 0c6ad333cdccd53d9f362a89634ee0ea.webp

正文


首先 , 话说在前头,

没有什么 在里面 好 和在外面好  或者 不好的 一说。

本篇文章内容:

  1. 使用场景
  2. 性能分析
  3. 个人看法


1. 使用场景


为什么要把 使用场景 摆在第一个 ? 因为本身try catch 放在 for循环 外面 和里面 ,如果出现异常,产生的效果是不一样的。 怎么用,就需要看好业务场景,去使用了。
① try  catch  在 for 循环 外面
代码示例 :
      public static void tryOutside() {  
    try {  
        for (int count = 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循环显然被中断");  
    }  
}  
结果: 3a19dd80f0d50d4f12adc452f0253872.webp

效果结论:

try  catch  在 for 循环 外面 的时候, 如果 for循环过程中出现了异常, 那么for循环会终止。
② try  catch  在 for 循环 里面
代码示例 :
      public static void tryInside() {  
  
    for (int count = 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循环显然继续执行");  
        }  
    }  
}  
结果: f4a50c440ef56b1c33493bc787c5ad52.webp效果结论:
try  catch  在 for 循环 里面 的时候, 如果 for循环过程中出现了异常,异常被catch抓掉,不影响for循环 继续执行。
ps: 在面试的时候,如果真的连上面这个在外面在里面使用效果都没说对,那,真的会去等通知了。 但是 之前不会的看官,看完这一篇, 肯定会了。


2. 性能


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

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

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

注意点是什么 ? 看代码:

我们简单用

      Runtime runtime = Runtime.getRuntime();  
long memory = runtime.freeMemory();  
来统计一下内存消耗情况: bb045d8162d8d8f77855a34291ea18eb.webp结论:
也就是说, try catch 放在 for 循环里面 ,因为出现异常不会终止 for循环。所以如果真的存在大批量业务处理全是异常,有那么一定的内存消耗情况。
如果说代码没出错的话, try catch 在 for 里面 和 外面 ,都是几乎没区别的。 为啥, 因为 异常try catch 其实一早编译完就标记了 如果从哪儿(from)出现异常,会直接去到(to)的那行代码去。
  • Exception table  : 当前函数程序代码编译涉及到的异常;

  • type  :异常类型;

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

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

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

67265c4c902710bab8debf73d94f4795.webp

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

3. 个人看法

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

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

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

      转自:blog.csdn.net/qq_35387940/article/details/128406626
      
最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。


正文结束


推荐阅读 ↓↓↓

1.JetBrains 如何看待自己的软件在中国被频繁破解?

2.无意中发现了一位清华妹子的资料库!

3.程序员一般可以从什么平台接私活?

4.40岁,刚被裁,想说点啥。

5.为什么国内 996 干不过国外的 955呢?

6.中国的铁路订票系统在世界上属于什么水平?                        

7.15张图看懂瞎忙和高效的区别!

88338f78f4f05d28c27d676250c0a2cd.webp
浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报