一、break
break
语句用于立即终止最内层的循环或switch
语句。它是一种控制流语句,能够在满足特定条件时跳出循环或结束switch
块的执行。
1、在循环中使用
1)一般的 break
break
语句可以用于for
、while
和do-while
循环中。当在循环中遇到break
语句时,循环会立即终止,程序控制流将跳转到循环之后的第一条语句。
下面给出一个例子:
生成 1-100 之间的整数,当生成出 66 这个数字时循环停止。
public class Test {
public static void main(String[] args) {
int num = 0;
while(true) {
num = (int)(Math.random() * 100) + 1;
System.out.print(num + " ");
if(num == 66) {
break;
}
}
}
}
运行结果:
可以发现生成了 66 后循环就停止了。
又例如,输入密码,假设密码是 123,三次机会。如果输入正确则退出循环。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int chance = 3;
while(chance > 0) {//三次机会
System.out.println("请输入密码");
String password = input.next();
if("123".equals(password)) {//判断输入的密码是否等于123
System.out.println("密码正确");
break;
}
chance--;
}
}
}
运行结果:
可以看到,虽然是第二次循环,但是我们输入了正确的密码,所以通过 break 退出了循环。
这里有一个新的方法:
String
类的equals
方法用于比较两个字符串的内容是否相同。具体来说,equals
方法比较的是字符串中的每一个字符是否相同,并且字符的顺序也必须一致。如果两个字符串相等,则返回true
,否则返回false
。
这里的形式最好写成这样:
"123".equals(password)
假设我们有一个变量password
,它可能是null
。如果直接调用password.equals("123")
,而password
恰好是null
,会导致NullPointerException
:
String password = null;
if (password.equals("123")) { // 这里会抛出 NullPointerException
// do something
}
为了避免这种潜在的异常,我们可以把常量字符串放在前面,这样即使password
是null
,也不会抛出异常:
String password = null;
if ("123".equals(password)) { // 这里不会抛出 NullPointerException
// do something
}
2)带标签的 break
Java还支持带标签的break
,用于终止指定标签的外层循环。这在嵌套循环中非常有用,可直接跳出多层循环。
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
break outerLoop; // 跳出 outerLoop 标签标记的循环
}
System.out.println("i: " + i + ", j: " + j);
}
}
运行结果:
可以发现,在 j == 3 时,带标签的 break 直接终止了外层循环。
对于多层的循环,例如三层循环,也可以使用标签来标记第二层循环,使用带标签的 break 来终止第二层循环。这样也就是说可以使用带标签的 break 来终止任意一层循环。
对于这种形式,在实际开发中要尽量不用,实际上在实际开发中循环就最好不要超出三层。因为要保证较好的可读性。
2、在 switch 中使用
break
语句在switch
语句中非常常见,用于终止特定的case
块。如果没有break
语句,程序会继续执行后续的case
块(即使这些块的条件不满足),直到遇到break
语句或switch
语句结束为止。这种行为称为“贯穿”或“fall-through”。
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
default:
System.out.println("Weekend");
break;
}
// 输出: Wednesday
二、continue
1、一般的 continue
continue
语句用于跳过当前循环迭代的剩余部分,并立即开始下一次循环迭代。它是一种控制流语句,可以用于for
、while
和do-while
循环中。continue
语句有助于优化代码,减少嵌套层次,提高代码的可读性。
例子:
打印 1~6 和 10 ~ 20 这几个数字。
public class Test {
public static void main(String[] args) {
int i = 1;
for(i = 1; i <= 20; i++) {
if(i > 6 && i < 10) {
continue;
}
System.out.print(i + " ");
}
}
}
运行结果:
2、带标签的 continue
Java还支持带标签的continue
,用于跳过指定标签的外层循环的当前迭代,并立即开始该外层循环的下一次迭代。这在嵌套循环中非常有用,可以控制多层循环的流向。
示例:
public class Test {
public static void main(String[] args) {
outerLoop:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue outerLoop; // 进入 outerLoop 标签标记的循环的下一次迭代
}
System.out.println("i: " + i + ", j: " + j);
}
}
}
}
运行结果:
可以发现当 j == 2 时就直接 continue 跳过标签标记的最外层循环的当前迭代开始下一次迭代了。
三、return
return
语句用于从方法中返回一个值或直接终止方法的执行。它是控制方法执行流程的重要工具。以下是关于Java中return
语句的详细介绍:
return
语句的作用
- 返回值:
return
语句可以将一个值从方法中返回给调用者。这个值的类型必须与方法声明中的返回类型一致。 - 终止方法执行:当
return
语句被执行时,方法的执行立即结束,控制权返回到方法的调用者。
return
语句的形式
- 无返回值(void方法):在
void
类型的方法中,return
语句可以单独使用,用于提前终止方法。 - 有返回值:在有返回类型的方法中,
return
语句必须返回一个与方法声明中返回类型一致的值。
如果 return 放到 main 方法中,则会终止程序。
例如:
public class Test {
public static void main(String[] args) {
for(int i = 0; i < 3; i++) {
if(i == 1) {
return;
}
System.out.println("i = " + i);
}
}
}
这里在 i == 1 时,main 方法会退出,也就是程序退出。所以运行结果为: