Java try catch 应该在 for 循环里面还是外面?(面试)

embedded/2024/12/22 16:26:33/

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

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

一、try  catch  在 for 循环外面

java">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循环显然被中断");  }  
}  

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

二、try  catch  在 for 循环里面 

java">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循环显然继续执行");  }  }  
}  

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

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

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

        可以在tryInside()方法内部的循环中添加统计内存消耗的代码。这样,每次循环执行时都可以记录一下内存的使用情况,这样,在每次循环执行前后,都会输出可用内存的情况,可以通过比较前后两次输出的内存情况来评估内存的消耗情况。

java">public class CompositeTest {public static void main(String[] args){tryInside();}public static void tryInside() {Runtime runtime = Runtime.getRuntime();long begintime = System.currentTimeMillis();for (int count = 1; count <= 5; count++) {long beginMemory = runtime.freeMemory(); // 获取当前可用内存System.out.println("Free Memory before iteration " + count + ": " + beginMemory);try {if (count == 3) {// 故意制造一下异常int num = 1 / 0;} else {System.out.println("count:" + count + " 业务正常执行");}} catch (Exception e) {System.out.println("try catch  在for 里面的情形, 出现了异常,for循环显然继续执行");}long endtime = System.currentTimeMillis();System.out.println(endtime - begintime);long lastMemory = runtime.freeMemory(); // 获取循环后的可用内存System.out.println("Free Memory after iteration " + count + ": " + (beginMemory - lastMemory)/10000);}}
}

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

        如果说代码没出错的话, try catch 在 for 里面 和 外面 ,都是几乎没区别的。因为 异常try catch 其实一早编译完就标记了 如果从哪儿(from)出现异常,会直接去到(to)的那行代码去。

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

  • type :异常类型;

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

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

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


http://www.ppmy.cn/embedded/24112.html

相关文章

GitHub Copilot申请和使用

GitHub Copilot申请和使用 文章目录 前言一、申请二、使用总结 前言 之前已经成功进行了Github学生认证&#xff0c;今天邮件通知之前的学生认证已经通过。那么就去进行GitHub Copilot申请和使用。 前面准备&#xff1a;Github学生认证 一、申请 进入github的settings&#x…

【java超方便的导入导出工具类】SpringBoot操作Excel导入和导出

Excel导入和导出 一、前期准备 1、首先导入主要的依赖 <dependencies><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><depende…

SpringCloud系列(21)--更换Ribbon的负载均衡模式

前言&#xff1a;在上一篇文章中我们介绍了关于Ribbon的知识点已经如果去应用Ribbon&#xff0c;而本章节内容则是关于如何去切换Ribbon的负载均衡模式。 以下是上篇文章的部分内容&#xff0c;可以再看下熟悉下&#xff0c;方便后续理解 Ribbon工作架构图 Ribbon的负载均衡模式…

Android studio Button 监听敲击事件

1&#xff0c;在布局实现 我们在layout文件中&#xff0c;给每一个用到的Button设置属性android:onClick"onClick"&#xff0c; 然后我们在MainActivity 里面写一个onClick()方法&#xff0c;这里就不是重写了&#xff0c;因为我们没有任何继承父类和引用接口&…

SpringCloud特殊问题处理1——通过Feign传递List类型参数

在微服务项目的开发过程中&#xff0c;远程数据接口调用是必需的操作。其中绝大部分的接口写法和用法与api相似&#xff0c;但是对于List<Obj>这种对象的参数使用需要异常关注。 1.List<Obj>对象集合参数传递 注意&#xff1a; Feign接口不能直接使用List<Ob…

「51媒体」2024年北京有哪些媒体邀约资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 北京的媒体邀约资源非常丰富&#xff0c;涵盖了多种类型的平台&#xff0c;包括但不限于&#xff1a; 广播电视台&#xff1a;总台&#xff0c;北京地方电视台&#xff0c;教育电视台&am…

使用OkHttp 缓存 API 调用提高Android应用性能

使用OkHttp 缓存 API 调用提高Android应用性能 坦率地说&#xff0c;我们都遇到过这样的情况——焦急地刷新应用&#xff0c;看着加载图标不停地旋转&#xff0c;等待那个至关重要的 API 响应。这样的等待我们已经是炉火纯青了&#xff0c;是吧&#xff1f;手指有节奏地轻敲屏…

课程34:Windows Docker部署.Net Core项目

这里写目录标题 🚀前言一、安装Docker Desktop1.1 官网下载Docker1.2 安装Docker1.2.1 选择配置,默认都勾选1.2.2 安装中1.2.3 安装成功1.2.4 启动1.2.5 启动成功二、.Net Core 项目发布与部署2.1 修改Dockerfile文件2.2 Web项目发布2.3 修改配置2.3.1 修改dockerfile<