1454 字
7 min
0

流程控制

Java 程序的执行流程主要包括三种方式:顺序执行、选择执行和循环执行。每种方式都通过不同的控制结构来实现,决定程序的执行顺序和逻辑。

Java 程序的执行通常分为三种方式:顺序执行选择执行循环执行

1756900278454

顺序结构

程序代码按照从上到下的顺序逐行执行,代码中的每一行都会依赖前一行的执行结果。

选择结构

if选择结构

  1. 如果 if 语句只执行一条语句,可以省略 {};但为了提高代码的可读性,建议始终使用 {} 包围代码块,尤其是当有多条语句需要执行时。
  2. {} 中的代码块限定了其中定义的变量或常量的作用域,这些变量只能在该代码块内部访问,外部无法使用。
  3. 若条件选择较多,使用 if-elseswitch 结构可以提高效率,而不仅仅依赖多个 if 语句。
  4. if 语句内部可以嵌套其他选择结构(如 if-else)或循环结构(如 forwhile)来处理复杂的逻辑。

switch选择结构

  1. switch 语句根据表达式的值跳转到匹配的 case 标签处执行,直到遇到 break 语句或 switch 语句末尾。如果没有匹配的 case 值,则进入 default 语句(如果有的话)。
  2. switch() 中的表达式类型必须为:byteshortintcharString(JDK 7 及以后)、枚举类型(JDK 1.5 及以后)和密封类(JDK 17 及以后)
  3. switch 不直接支持包装类(如 ByteShortIntegerCharacter),但可以通过自动拆箱机制间接支持。
  4. switch() 不支持 long:因为其范围过大,不适合用作 switch 的条件。
  5. switch() 不支持 floatdouble:由于浮点数的精度问题,不适合用于精确匹配。
  6. switch() 不支持 boolean:只有两个值(truefalse),直接使用 if-else 更合适。
  7. case 后的值必须是常量,且常量类型要与 switch() 中的表达式类型匹配,并且不允许有重复的 case 值。
  8. break 用于跳出 switch 语句;可以省略 break,但若省略,程序会继续执行后面的 case 语句,直到遇到 breakswitch 语句的结束。
  9. default 语句是可选的,但最好不要省略,除非所有 case 都能覆盖所有可能的值。casedefault 的位置无序,但 default 语句通常放在最后。
public class Main {
    public static void main(String[] args) {
        int day = 3;
 
        switch (day) {
            case 1:
                System.out.println("今天是星期一");
                break;
            case 2:
                System.out.println("今天是星期二");
                break;
            case 3:
                System.out.println("今天是星期三");
                // 没有 break,会继续执行下面的 case
            case 4:
                System.out.println("今天可能是星期三或星期四");
                break;
            case 5:
                System.out.println("今天是星期五");
                break;
            default:
                System.out.println("不是有效的星期值");
        }
    }
}
 

switch和if的区别

  1. switch:适用于判断固定值时,特别是当需要对多个常量值进行匹配时。
  2. if:适用于判断区间、范围或布尔类型的表达式。
  3. switch 能做的事,if 也能做,但反之不成立(例如,switch 不能直接判断区间或布尔值)。

循环结构

for循环结构

初始化表达式仅在循环开始时执行一次;每次迭代前都会检查循环条件,循环体执行完后更新循环变量。

while循环结构

while 循环与 for 循环类似,在每次迭代前先检查循环条件,条件为 true 时才执行循环体。语法灵活,适合循环次数不确定的情况。

do-while循环结构

先执行一次循环体,再检查循环条件,保证循环体至少执行一次。

break和continue详解

break关键字

  1. break 用于强制退出当前循环或 switch 语句,不再执行其余的代码块。
  2. 它适用于 switch 语句和循环结构中,作用于 for 循环时,for 后的更新表达式也不会被执行。
  3. ⚠️ 注意:break 之后不能有其他代码,因为一旦执行了 break,当前循环或 switch 会终止,后续代码无法执行。

continue关键字

  1. continue 用于跳过当前循环的剩余语句,立即进行下一次循环条件的判断。
  2. 它只适用于循环结构中,不可在其他控制流语句中使用。

带标签的break和continue

在多层嵌套循环中,普通的 breakcontinue 只能作用于最近的一层循环。Java 允许为循环语句加上标签,从而让 breakcontinue 直接作用于指定的外层循环。

  1. break label:直接终止带该标签的循环。
  2. continue label:跳过带该标签循环的当前迭代,进入下一次循环。

public class LabelDemo {
    public static void main(String[] args) {
        outer: // 标签
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) continue outer; // 跳过外层循环的当前迭代
                if (i == 2) break outer;    // 直接结束外层循环
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}
 

💬 关于 goto

  • 在 早期的 C/C++ 语言中,goto 语句允许无条件跳转到某个标记位置,但它常常导致代码结构混乱、难以维护,被称为“意大利面条式代码”。
  • Java 中保留了 goto 关键字,但它没有被实现,不能使用。这是因为 Java 设计时就有意避免 goto 的副作用,而是通过带标签的 breakcontinue 提供有限且可控的跳转功能。

while与for的区别

forwhile 循环在语义上是可以互换的。通常,for 循环适合已知循环次数或基于计数器的场景,而 while 循环更适合循环次数不确定、仅依赖条件判断的情况

相关文章

评论区