为啥尽量不要将try…catch写在循环中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥尽量不要将try…catch写在循环中?相关的知识,希望对你有一定的参考价值。

循环语句不能用try...catch,而要用do...loop语句。
循环结构允许重复一行或几行代码。循环结构有Do…Loop、For…Next和For Each…Next结构。
用Do循环重复一个语句块,且重复次数不定。Do…Loop语句有几种变化形式,但每种形式都以计算数值为条件以决定是否继续重复。和判定结构一样,条件必须是一个数值或者值为非零或零的表达式。
在当循环中,只要条件为True就执行条件:
Do While 条件
语句
Loop
当Visual Basic重复这个Do循环时会首先测试条件,如果条件为零,则跳过所有语句,如果条件为非零,则Visual Basic执行语句,然后退回到Do While语句再测试条件。
因此,只要条件为True,循环可以随意重复多少次。如果一开始就为False,则不会重复语句。
Do…Loop语句的另一种演变形式是先重复语句,然后每次执行后测试条件,保证语句块至少重复一次:
Do
语句
Loop While 条件
直到循环,是指条件为假时,就重复循环。
循环零次或几次的一个循环结构是:

Do Until 条件
语句
Loop
至少循环一次的循环结构为:
Do
循环
Loop Until 条件
希望我能帮助你解疑释惑。
参考技术A try ... catch是异常捕获语句,但是不是普通语句,不普通在于,一旦出现异常,后面的语句不再执行,直接执行catch段的语句,原来中断的地方不能继续。
我们写循环,为的是能够重复地个过程。在这个过程中,尽量不出现不可控的中断。这与我们主动break是两回事。
因此,合适的做法是,尽可能避免异常数据的输入,或者出现异常时,提示操作者,让操作者选择下一步的动作。
比如,一个程序,要求输入整数在1~100之间,如果输入了超出范围的数,就出现异常了。可以在输入时就检验,如果超出范围,要求重新输入。
while (scanf("%d",&a),(a<1)||(a>100)) printf("超出1~100,重新输入\n");

try-catch遇到循环时,将try代码块放在循环内还是循环外的选择

当循环内的代码出现异常,需要结束循环时,将try代码块放在循环外;

当循环内的代码出现异常,需要继续执行循环时,将try代码块放在循环内

 

	public static void main(String[] args) {
		int runs = 3; //循环运行次数

		//try代码块在循环外
		try {
			for (int i = 0; i < runs; i++) {
				if (i == 0) {
					throw new RuntimeException("try在循环外时,出现运行异常");
				}
				System.out.println("do something...");
			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		System.out.println("--------------------------");

		//try代码块在循环内
		for (int i = 0; i < runs; i++) {
			try {
				if (i == 0) {
					throw new RuntimeException("try在循环内时,出现运行异常");
				}
				System.out.println("do something...");
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

  技术分享图片

 

以上是关于为啥尽量不要将try…catch写在循环中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须将每个 Thread.sleep() 调用包装在 try/catch 语句中? [复制]

try-catch遇到循环时,将try代码块放在循环内还是循环外的选择

函数进阶3

在 try-catch 块中包装循环会导致性能问题吗? [复制]

为啥使用Try,Catch捕获异常,程序依然Crash

面试官:try-catch放在循环体内还是循环体外,哪种效率更高?