大多数语言都支持三种控制执行流程:顺序、条件、循环语句。以一个人走路为例介绍这三种语句。
顺序语句即一条一条指令的执行。就如同一个人一步一步的往前走。
条件语句根据条件作出选择。就如同一个人走着走着就遇到了一个分岔路口,指示牌上写着只有一条路可以通向终点,所以这回作出选择,选对了可以到达终点,选错了就不能走到终点了。
if(boolean-expression) if(boolean-expression1)
statement1; 或者 statement1;
else else if(boolean-expression2)
statement2; statement2;
else
statement3;
右边的可以理解为一个条件语句的嵌套,也就是说条件语句是可以嵌套的,但要注意else语句是可以不写的,并且boolean-expression会产生一个boolean.
当条件为false时跳出循环,否则会一直执行循环体里的语句。
while(boolean-expression)
{
//body
}
这就好比这个人心里有个信念,只要还没走到终点,我就会一直走下去。这里是否到终点了就是条件。没达到就执行循环体里的继续走下去,一旦达到了就可以结束了。
do
{
//body
}while(boolean-expression)
这就好比这个人心理想着走一步看一步吧,走完这一步要是达到终点了就不走了,没到就再走一步看看。
Compare:很容易看出while语句与do-while语句的区别,do-while至少执行一次(先走一步看看),而while语句有可能一次也没有执行(先看到没到终点)。
for(initialization;boolean-expression;step)
statemnet;
当遇到了一个指示牌上写着离终点还差100步的时候,这个人开始想着自己现在还没走(initialization),而他要走100步,此时小于100步(boolean-expression),那他就得走一步(statement);走完之后就得把自己已走的步数加1(step),然后继续和100步比较,没有到就继续走,一旦到了就意味着他到达了终点。这就是for循环语句的执行顺序。
return的作用就是返回一个函数的返回值;但有时候函数是没有返回值的,此时也可以使用return语句,只不过return语句一样没有返回值;即"return;"这样。当执行到return语句,即退出了该函数,所以哪怕后面还有代码都不会执行了,所以return也是可以用来控制执行流程的。
在任何循环里内部,都可以使用这两个关键字控制执行流程。break用于强行退出循环,不会执行循环中的其余代码;continue用于退出当前循环,然后退回到循环起始处,开始下一次循环。
for (int i = 0; i < 5; i++) { if (i == 1) continue; if (i == 3) break; System.out.println(i); }
output:
0
2
如果没有那两个if语句,那么结果将会打印0、1、2、3、4,但是由于加入了continue,所以退出了i=1的循环,跳到了循环起始处,开始下一次循环i=2;由于加入了break语句,在i=3时退出了循环,所以3和4都没有被打印。
如果在多重循环中,那么break和continue会跳到最外面还是最里面的循环呢?
Key:continue会退回到最内层循环的开头,并继续执行;break一样会中断最内层循环的开头。
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { if (j == 0) continue; if (j == 2) break; System.out.println("j="+j); } System.out.println("i="+i); } System.out.println("Hello World");
output:
j=1
i=0
j=1
i=1
Hello World
分析:当i=0时,j=0时,continue跳到内层循环的开头,执行j=1,打印出了
j=1,继续执行j=2,break跳出内层循环,打印了i=0;这里面如果continue跳到的是外层循环头,则不会打印j=1以及i=0,会直接打印Hello World;如果break跳出的是外层循环,那么也只会打印jj=1和Hello World。所以通过这段代码也能看出continue和break都只会跳到或跳出最内层循环。
那么如果我们希望可以跳到外层循环或者多层循环时内部的某一个循环,有什么方法呢?
key:Java提供了标签这种机制,可以让我们很轻易的实现这种想法。标签就当相当于给某个循环取了个名字,当我使用break或者continue时,可以指定它跳到我想到的那个循环。在Java里需要使用标签的唯一理由就是因为有循环嵌套的存在,而且想从多层嵌套中break或continue。
标签是后面跟有冒号的标识符,形如"label:",后接循环语句,
outer: for (int i = 0; i < 2; i++) { inner: for (int j = 0; j < 3; j++) { if (j == 0) continue outer; if (j == 2) break inner; System.out.println("j=" + j); } System.out.println("i=" + i); } System.out.println("Hello World");
output:Hello World
从上面代码我们既可以看到标签的定义,也可以看到标签的使用,并且通过结果也可以看到标签的作用。