1. 关于Break

Break 主要用于 强行退出循环, 在任何循环体内都可以利用break控制循环的流程,出现break后,循环体内的剩余语句皆不会被执行。

break 示例:

package com.zctou.structure;

public class BreakDemo01 {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            if(i==10) {
                break ;
            }
            System.out.println(i);
        }
    }
}

输出:

0
1
2
...
8
9
可以看到,当i=10的时候,执行if()里面的break语句,程序强制退出 for循环 并跳过后面剩下的输出语句,比方说之前学过的switch case 语句,case后不带break,会出现case穿透现象

2. 关于Continue

break 一样,continue也是用于控制循环的流程。不同的是,break强制退出循环,而contine只会退出某一次的循环,程序并不会立刻终止循环,而是继续执行走下一次判断条件,继续走完整个循环。

continue示例:

package com.zctou.structure;

public class ContinueDemo01 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if(i<7&&i>3) {
                continue;
            }
            System.out.println(i);
        }
    }
}

输出:

0
1
2
3
7
8
9
从结果看,很明显程序走完了整个循环休,而当循环进入i<7&&i>3时,程序都执行了continue语句。

continuebreak一样,都跳过了后面要执行的循环语句;不一样的是,continue并没强制退出for循环,而是跳到了循环最开始的地方,继续往下执行下一次循环判断。

3. 关于goto

goto关键字很早就出现在程序设计语言中,虽然goto是Java的一个保留关键字,但并没被Java正式使用,Java没有goto。然后Java中,goto的影子出现在了带标签的break和continue上。

所谓“标签”就是指后面跟一个冒号的标识符,如:label:

对于Java来说唯一用到标签的地方就是循环语句之前。而在循环这前设置标签的理由是:我们希望在其中嵌套另一个循环。由于break和continue通常用作中断当前循环,连同标签用时,就会中断循环后回到标签所在的地方。

label示例:

//打印101-150之间的所有质数
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
//因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
package com.zctou.structure;

public class GotoDemo01 {
    public static void main(String[] args) {
        //Java label使用
        //打印101-150之间的所有质数
        //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
        //因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
        outer:for(int i=101;i<=150;i++) { //循环i=101-150之间每个数
            for(int j=2; j<i/2; j++) {  //从2开始到j<150/2,都拿去与i相除,
                if(i%j==0) {            //一旦能发现有与i相应的因素,返回outer标签所在,
                    continue outer;     //跳过这个内循环,去外循环中找i的下一个数进行对比
                }
            }
            System.out.print(i + " ");
        }
    }
}

输出:

101 103 107 109 113 127 131 137 139 149 
上面是用labelouter: && continue outer)的方法,当然也可用不用label
package com.zctou.structure;

public class GotoDemo02 {
    public static void main(String[] args) {
        //Java label使用
        //打印101-150之间的所有质数
        //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
        //因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
        boolean flag = true ; //质数为true,不是质数为false
        for(int i=101; i<150; i++) {
            for (int j=2; j<i/2; j++) {
                if(i%j==0) {
                    flag = false ; //被整除,不是质数,flag设为false,并跳出循环
                    break;
                }
            }
            //是质数,输出;
            //不是质数就不输出,并把flag设为默认值后重新找下一个数判断
            if(flag) {
                System.out.print(i + " ");
            } else {
                flag = true;
            }
        }
    }
}
文章目录