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

2023-12-18 21:52

本文主要是介绍try catch 应该在 for 循环里面还是外面?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.使用场景

为什么要把 使用场景 摆在第一个 ?
因为本身try catch 放在 for循环 外面 和里面 ,如果出现异常,产生的效果是不一样的。
怎么用,就需要看好业务场景,去使用了。

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

结果:
在这里插入图片描述
效果结论:

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

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

结果:
在这里插入图片描述
效果结论:

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

2.性能

时间上, 其实算是无差别。
内存上, 如果没出异常,其实也是无差别。
但是如果出现了异常, 那就要注意了。
注意点是什么 ?看代码:
我们简单用

Runtime runtime = Runtime.getRuntime();  
long memory = runtime.freeMemory();  

来统计一下内存消耗情况:
在这里插入图片描述
结论:

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

如果说代码没出错的话, try catch 在 for 里面 和 外面 ,都是几乎没区别的。
为啥, 因为 异常try catch 其实一早编译完就标记了 如果从哪儿(from)出现异常,会直接去到(to)的那行代码去。
Exception table : 当前函数程序代码编译涉及到的异常;
type :异常类型;
target:表示异常的处理起始位;
from:表示 try-catch 的开始地址;
to:表示 try-catch 的结束地址;
在这里插入图片描述
所以如果不考虑业出错,是否终止循环, 这个try catch 放里放外没啥区别。

这篇关于try catch 应该在 for 循环里面还是外面?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/509880

相关文章

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

ScrollView 往上滑动,里面的一个View停在某个位置的思路

1.scrollView的contentoffset 为view的左上角,减去此时scrollView的左上角 2.而且还不需要让那个红色的view removeFromSuperView ,直接self.view AddSubView 就会自动从原来的那个View脱离开来 3.以后遇到问题的思路。当发现UIView很许多奇特的效果的时候,思考它是不是在不断的改变父控件。 #pragma m

C语言 while循环1

在C语言里有3种循环:while循环    do  while 循环    for循环 while语句 //while语法结构while(表达式)循环语句; 比如在屏幕上打印1-10 在while循环中 break用于永久的终止循环 在while循环中,continue的作用是跳过本次循环 continue后边的代码,直接去判断部分,看是否进行下一次循环 //getcha

Linux网络编程之循环服务器

1.介绍 Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数. 2.循环服务器模型 TCP循环服务器: 算法如下:          socket(...);

使用AGG里面的clip_box函数裁剪画布, 绘制裁剪后的图形

// 矩形裁剪图片, 透明void agg_testImageClipbox_rgba32(unsigned char* buffer, unsigned int width, unsigned int height){// ========= 创建渲染缓冲区 =========agg::rendering_buffer rbuf;// BMP是上下倒置的,为了和GDI习惯相同,最后一个参数是

nlp基础-文本预处理及循环神经网络

1 认识文本预处理 1 文本预处理及其作用 定义:文本送给模型之前,提前要做的工作 作用:指导模型超参数的选择 、提升模型的评估指标 举个例子: 思路常识,打造成 X Y关于Y:10分类标签是否均衡关于X:数据有没有脏数据 数据长度(512)样本不够! 文本预处理 工作 结束 的标志:准备出来X和Y 能送给模型 2 文本预处理的主要环节 1 文本处理的基本方法 分词:按照一定规

MacBook安装python3.x后如何使得在命令行里面python默认为3.x版本

MacBook的MacOsX系统自带有python2.7版本,但是现在的统计机器学习的算法库以及深度学习的大部分算法库已经逐渐抛弃python2.x版本,转向python3.x版本了。以tensorflow为例,原本的estimator库已经被v1所收纳。所以,在学习环境上安装python3.x版本从尝鲜变成了刚需。但是呢,网上有很多人都在说mac自带的python2.7版本服务于多个mac服务,

添加一个对象到集合中时,集合里面存放的是对象的引用还是对象本身?

问题:添加一个对象到集合中时,集合里面存放的是对象的引用还是对象本身?   答:对象的引用。以下代码可以证明: Java代码   import java.util.ArrayList;   import java.util.List;      public class Test5 {       public static void main(String args[])