- for循环在编程中经常遇到,这里我们探究一下其中语句的执行顺序,以更加准确的确定
代码演示
- 结构说明
a.初始条件:对刚开始执行循环体做初始化;for (a初始条件; b循环判断条件; c循环过程表达式) { d循环体 }
b.循环判断条件:判断是否满足循环执行的条件;
c.循环过程表达式:每次执行循环体后,额外执行的语句,一般为i++
,i--
d.循环体:循环执行过程中的执行语句
以下,我们都以 a b c d 来代替指定的表达式; - 演示一:条件不满足时的执行情况
上结果:int i = 0; System.out.println("for start==="+i); for (i = 1; i < 1; System.out.println("other: "+i)) { System.out.println("inner circle: "+i); i++; } System.out.println("inner end===="+i);
所以当条件不满足时:for start===0 inner end====1
执行顺序是:a->b - 演示二:条件满足但仅仅执行一次的情况
上结果:int i = 0; System.out.println("for start==="+i); for (i = 1; i == 1; System.out.println("other: "+i)) { System.out.println("inner circle: "+i); i++; } System.out.println("inner end===="+i);
所以当条件仅仅满足执行一次时:for start===0 inner circle: 1 other: 2 inner end====2
执行顺序是:a->b->d->c->b - 终极演示:完整打印每一步运行
上结果:public static void main(String[] arg0){ int i = 0; System.out.println("start===="); for (System.out.println("a初始条件"); doChoice(i); System.out.println("c循环过程表达式")) { System.out.println("d循环体"); i++; } System.out.println("end===="); } private static boolean doChoice(int i) { System.out.println("b循环判断条件"); if(i > 3){ return false; } return true; }
所以当条件满足多次执行时:start==== a初始条件 b循环判断条件 d循环体 c循环过程表达式 b循环判断条件 d循环体 c循环过程表达式 b循环判断条件 d循环体 c循环过程表达式 b循环判断条件 d循环体 c循环过程表达式 b循环判断条件 end====
执行顺序是:a->b->d->c->(b->d->c)…->b
结合前面的分析,我们得出下面的流程图:结论
- 初始化条件,无论如何都会执行一次;
- 判断条件,每次循环体执行前均会检查一次,如果满足则进入循环体,不满足则结束循环;
- 其他处理逻辑c,在每次循环体执行结束,均会执行一次,可以认为是循环体的最末的执行语句;
- 开发人员需要注意 *a.初始化、c.循环过程表达式 的执行时机,以免莫名其妙的问题出现
- 一般c.循环过程表达式,为
i++
,i--
等递增递减语句; - 如果b.判断条件留空,无内容,则默认为true,默认一定会进入循环体,除非循环体内部
break
;