# `break`语句

> 原文： [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html)

## `break`语句

`break`语句有两种形式：标记和未标记。您在前面对`switch`语句的讨论中看到了未标记的表单。您也可以使用未标记的`break`来终止`for`，`while`或`do-while`循环，如下面的 [`BreakDemo`](examples/BreakDemo.java) 程序所示：

```
class BreakDemo {
    public static void main(String[] args) {

        int[] arrayOfInts = 
            { 32, 87, 3, 589,
              12, 1076, 2000,
              8, 622, 127 };
        int searchfor = 12;

        int i;
        boolean foundIt = false;

        for (i = 0; i < arrayOfInts.length; i++) {
            if (arrayOfInts[i] == searchfor) {
                foundIt = true;
                break;
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor + " at index " + i);
        } else {
            System.out.println(searchfor + " not in the array");
        }
    }
}

```

该程序在数组中搜索数字 12。以粗体显示的`break`语句在找到该值时终止`for`循环。然后控制流转移到`for`循环后的语句。该程序的输出是：

```
Found 12 at index 4

```

未标记的`break`语句终止最内层`switch`，`for`，`while`或`do-while`语句，但标记的`break`终止外部语句。以下程序 [`BreakWithLabelDemo`](examples/BreakWithLabelDemo.java) 与前一个程序类似，但使用嵌套的`for`循环来搜索二维数组中的值。找到该值后，标记的`break`将终止外部`for`循环（标记为“搜索”）：

```
class BreakWithLabelDemo {
    public static void main(String[] args) {

        int[][] arrayOfInts = { 
            { 32, 87, 3, 589 },
            { 12, 1076, 2000, 8 },
            { 622, 127, 77, 955 }
        };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;

    search:
        for (i = 0; i < arrayOfInts.length; i++) {
            for (j = 0; j < arrayOfInts[i].length;
                 j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    break search;
                }
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor + " at " + i + ", " + j);
        } else {
            System.out.println(searchfor + " not in the array");
        }
    }
}

```

这是该程序的输出。

```
Found 12 at 1, 0

```

`break`语句终止带标签的语句;它不会将控制流转移到标签上。控制流将在标记（终止）语句之后立即转移到语句。

## `continue`声明

`continue`语句跳过`for`，`while`或`do-while`循环的当前迭代。未标记的表单跳到最内层循环体的末尾，并评估控制循环的`boolean`表达式。以下程序 [`ContinueDemo`](examples/ContinueDemo.java) 逐步执行`String`，计算字母“p”的出现次数。如果当前字符不是 p，则`continue`语句将跳过循环的其余部分并继续执行下一个字符。如果 _ 是 _ a“p”，程序会增加字母数。

```
class ContinueDemo {
    public static void main(String[] args) {

        String searchMe = "peter piper picked a " + "peck of pickled peppers";
        int max = searchMe.length();
        int numPs = 0;

        for (int i = 0; i < max; i++) {
            // interested only in p's
            if (searchMe.charAt(i) != 'p')
                continue;

            // process p's
            numPs++;
        }
        System.out.println("Found " + numPs + " p's in the string.");
    }
}

```

这是该程序的输出：

```
Found 9 p's in the string.

```

要更清楚地看到此效果，请尝试删除`continue`语句并重新编译。当你再次运行程序时，计数将是错误的，说它找到 35 p 而不是 9。

标记的`continue`语句跳过标记有给定标签的外循环的当前迭代。以下示例程序`ContinueWithLabelDemo`使用嵌套循环来搜索另一个字符串中的子字符串。需要两个嵌套循环：一个遍历子字符串，一个迭代搜索的字符串。以下程序 [`ContinueWithLabelDemo`](examples/ContinueWithLabelDemo.java) 使用标记形式的 continue 跳过外循环中的迭代。

```
class ContinueWithLabelDemo {
    public static void main(String[] args) {

        String searchMe = "Look for a substring in me";
        String substring = "sub";
        boolean foundIt = false;

        int max = searchMe.length() - 
                  substring.length();

    test:
        for (int i = 0; i <= max; i++) {
            int n = substring.length();
            int j = i;
            int k = 0;
            while (n-- != 0) {
                if (searchMe.charAt(j++) != substring.charAt(k++)) {
                    continue test;
                }
            }
            foundIt = true;
                break test;
        }
        System.out.println(foundIt ? "Found it" : "Didn't find it");
    }
}

```

这是该程序的输出。

```
Found it

```

## `return`声明

最后一个分支语句是`return`语句。 `return`语句从当前方法退出，控制流返回到调用方法的位置。 `return`语句有两种形式：一种是返回值，另一种是不返回值。要返回值，只需在`return`关键字后面放置值（或计算值的表达式）。

```
return ++count;

```

返回值的数据类型必须与方法声明的返回值的类型匹配。声明方法`void`时，请使用不返回值的`return`形式。

```
return;

```

[课程和对象](../javaOO/methods.html)课程将涵盖您需要了解的有关编写方法的所有内容。