Java 流程控制语句


流程控制语句根据条件决定程序执行的代码块。


流程控制语句分类

Java语言提供了3种类型的流程控制语句。

  • 判断语句,包含if、if-else、switch语句。
  • 循环语句,包含for、while、do-while语句。
  • 分支语句,包含break、continue、return语句。

if语句

if语句的形式:

if(表达式1) {
  语句块1
} else if (表达式2) {
  语句块2
}
...
else {
  语句块3
}

else ifelse部分都是可选的。

if语句执行过程:

计算表达式1的值,如果为true,则执行语句块1,终止if语句。否则,计算表达式2的值,如果为true,则执行语句块2,终止if语句。如果表达式1表达式2都为false,则执行语句块3,终止if语句。

下面是if语句的例子。

public class IfElse {
    public static void main(String[] args) {
        int i = 1;
        boolean b = true;

        if (b)
            System.out.println("b is true" );    // b is true

        if (i > 1)
            System.out.println("i > 1" );
        else
            System.out.println("i <= 1" );    // i <= 1

        if (i > 10)
            System.out.println("i > 10" );
        else if (i >= 0 && i <= 10)
            System.out.println("i >= 0 and i <= 10" );    // i >= 0 and i <= 10
        else
            System.out.println("i < 0" );
    }
}

if语句只会执行多个语句块中的其中一个语句块,即只执行第一个值为true的表达式后面的语句块,如果所有表达式都为false,则执行语句块3

switch语句

switch语句的形式:

switch(表达式1) {
  case 表达式2 : 语句2; break;
  case 表达式3 : 语句3; break;
  ...;
  default : 语句4; break;
}

break语句是可选的。

switch语句的执行过程:

  1. 计算表达式1的值(表达式1的值可以为byte、short、int、char和对应的包装类,枚举,String)。
  2. 比较表达式1的值和表达式2的值,如果相等,则执行表达式2后面的语句,直到碰到break语句,终止switch语句。否则,比较表达式1的值和表达式3的值,如果相等,则执行表达式3后面的语句,直到碰到break语句,终止switch语句。
  3. 如果表达式1的值和所有case的表达式的值都不相等,则执行default后面的语句。

下面是switch语句的例子。

public class SwitchCase {
    public static void main(String[] args) {
        int i = 2;
        String color = "red";
        switch (i) {
        case 1:
            System.out.println("i = 1");
            break;
        case 2:
            System.out.println("i = 2");    // i = 2
            break;
        default:
            System.out.println("i is unknown");
        }

        // 没有break语句
        switch (color) {
        case "yellow":
            System.out.println("yellow");
        case "red":
            System.out.println("red");    // red
        default:
            System.out.println("unknown color");    // unknown color
        }
    }
}

switch语句可能会执行case中的多个语句块,直到碰到break语句或已经到了switch语句的结束位置。

for语句

for语句有两种形式:

for(初始化语句; 表达式1; 语句1) {
  语句2
}

for(语句3:表达式2) {
  语句5
}

第一种形式for语句执行过程:

  1. 首先执行初始化语句
  2. 计算表达式1的值,如果值为false,for循环终止。否则,执行语句2,然后执行语句1(语句1常用于增加或减少一个变量的值)。
  3. 重复步骤2。

第二种形式for语句执行过程:

  1. 计算表达式2的值,得到的值为一个集合或数组。
  2. 如果表达式2的值中还有未处理的元素,从表达式2的值中,按顺序取出一个未处理的元素做为语句3中声明的变量的值,执行语句5。如果没有未处理过的元素,for循环终止。
  3. 重复步骤2。

下面是for语句的例子。

public class ForLoop {
    public static void main(String[] args) {
        String[] fruits = new String[] {"apple", "orange", "pear"};

        for (int i = 0; i < 3; i++)
            System.out.println("i = " + i);    // 0 1 2

        for (String fruit : fruits)
            System.out.println(fruit);    // apple orange pear
    }
}

while和do-while语句

while语句形式:

while(表达式1) {
  语句1
}

do-while语句形式:

do {
  语句2
} while(表达式2);

while语句的执行过程:

  1. 计算表达式1的值,如果为true,则执行语句1;如果表达式1的值为false,终止while语句。
  2. 重复步骤1。

do-while语句的执行过程:

  1. 执行语句2
  2. 计算表达式2的值,如果为true,则执行语句2;如果表达式2的值为false,终止do-while语句。
  3. 重复步骤2。

下面是while语句和do-while语句的例子。

public class WhileLoop {
    public static void main(String[] args) {
        int i = 3;
        int j = 3;

        while(i-- > 0)
            System.out.println("i = " + i);    // 2 1 0

        do {
            System.out.println("\tj = " + j);    // 3 2 1 0
        } while (j-- > 0);
    }
}

break语句

break语句用于提前终止for、while循环和switch语句。

break语句有两种形式:break;break 标识符;。第一种形式break语句终止里层的循环,第二种形式break语句终止外层的循环。

下面是break语句的例子。

public class BreakLoop {
    public static void main(String[] args) {
        int[] arr = new int[] { 1, 2, 3 };
        int[][] arr2 = new int[][] { { 1, 2, 3}, {2, 4, 6}, { 3, 6, 9 } };

        for (int i : arr) {
            System.out.println("i = " + i);    // 1 2
            if (i == 2) {
                System.out.println("arr contains 2 ");    // arr contains 2
                break;
            }
        }

        get3:
        for (int i = 0; i < arr2.length; i++)
            for (int j : arr2[i]) {
                System.out.println("\tj = " + j);    // 1 2 3
                if (j == 3) {
                    System.out.println("\tarr2[" + i + "] contains 3 ");    // arr2[0] contains 3 
                    break get3;
                }
            }
    }
}

break语句终止有标识符的for或while语句,控制流程不会转移到该标识符位置的for或while语句,而是转移到该标识符位置的for或 while语句后面的语句。

continue语句

continue语句跳过当前这次循环,进入到下次循环。

continue语句有两种形式:continue;continue 标识符;。第一种形式continue语句跳过里层的当次循环。 第二种形式continue语句跳过外层的当次循环。

下面是continue语句的例子。

public class ContinueLoop {
    public static void main(String[] args) {
        int[] arr = new int[] { 1, 2, 3, 2 };
        int[][] arr2 = new int[][] { { 1, 2, 3 }, { 3, 6, 9 }, { 4, 8, 12 } };

        for (int i : arr) {
            if (i == 2) {
                System.out.println("arr contains 2 ");    // arr contains 2
                continue;
            }
            System.out.println("i = " + i);    // 1 3
        }

        get3:
        for (int i = 0; i < arr2.length; i++)
            for (int j : arr2[i]) {
                System.out.println("\tj = " + j);
                if (j == 3) {
                    System.out.println("\tarr2[" + i + "] contains 3 ");
                    continue get3;
                }
            }
    }
}

return语句

return语句终止当前方法的执行,返回到当前方法被调用的位置,继续往后运行。

return语句有两种形式:return 表达式1;return;。分别返回一个值或不返回值。