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
语句。
continue
跟break
一样,都跳过了后面要执行的循环语句;不一样的是,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
上面是用label
(outer:
&&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;
}
}
}
}