1. 概述

本文将深入讲解 Java 语言中的一个基础但关键的控制结构——do-while 循环。它用于在满足条件的前提下,重复执行一段代码块。与 while 循环不同的是,do-while 能保证循环体至少执行一次,这在某些场景下非常实用,比如用户输入校验、资源重试机制等,避免了冗余的代码重复。

2. do-while 循环详解

do-while 循环的核心特点是:先执行,后判断。也就是说,无论循环条件是否成立,循环体都会先执行一次,然后再检查条件是否为 true,若为 true 则继续下一轮循环,否则退出。

其语法结构如下:

do {
    // 循环体:要重复执行的语句
    statement;
} while (Boolean-expression);

⚠️ 注意:

  • while 后面的括号 () 不能省略。
  • 即使循环体只有一条语句,也建议使用花括号 {} 包裹,提升可读性,避免后续维护时出错。
  • while 后必须以分号 ; 结尾,这是 do-while 独有的语法要求,容易遗漏。

✅ 示例:基础用法

下面是一个简单的例子,打印变量 i 从 0 到 4 的值:

int i = 0;
do {
    System.out.println("Do-While loop: i = " + i++);
} while (i < 5);

输出结果为:

Do-While loop: i = 0
Do-While loop: i = 1
Do-While loop: i = 2
Do-While loop: i = 3
Do-While loop: i = 4

虽然这个例子用 while 循环也能实现,但如果初始条件不满足(比如 i = 10),while 循环会直接跳过,而 do-while 仍会执行一次——这正是它的价值所在。

🧠 典型使用场景

以下是 do-while 更常见的实战场景,能体现其“至少执行一次”的优势:

场景一:用户交互式输入

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);
String input;

do {
    System.out.print("请输入 'quit' 退出: ");
    input = scanner.nextLine();
    System.out.println("你输入的是: " + input);
} while (!input.equals("quit"));

✅ 优势:用户至少能看到一次提示信息,避免因初始条件判断失败导致“黑屏无响应”的尴尬。

场景二:带重试逻辑的操作

int attempts = 0;
final int MAX_ATTEMPTS = 3;
boolean success = false;

do {
    attempts++;
    System.out.println("第 " + attempts + " 次尝试连接数据库...");
    // 模拟操作:可能成功也可能失败
    success = simulateDatabaseConnect();
    
    if (success) {
        System.out.println("连接成功!");
    } else if (attempts < MAX_ATTEMPTS) {
        System.out.println("连接失败,正在重试...");
    }
} while (!success && attempts < MAX_ATTEMPTS);

if (!success) {
    System.err.println("已达到最大重试次数,程序退出。");
}

// 模拟连接方法
private static boolean simulateDatabaseConnect() {
    return Math.random() > 0.7; // 30% 概率成功
}

✅ 优势:即使首次调用就失败,也能进入重试流程,逻辑清晰,代码简洁。

3. 注意事项与踩坑提醒

使用 do-while 时,有几个容易忽略的点:

  • 无限循环风险:如果条件始终不满足,且循环体内没有 break 或状态变更,会导致死循环。

    do {
        System.out.println("Oops!");
    } while (true); // 死循环
    
  • ⚠️ 变量作用域:循环内定义的变量不能在 while 条件中使用,除非声明在外部。

  • 推荐使用场景:当你需要“先做一次,再判断是否继续”时,do-while 是最直接、最语义清晰的选择。

4. 总结

do-while 循环是 Java 控制流中不可或缺的一环,其“先执行后判断”的特性在用户交互、资源重试、状态轮询等场景中表现出色。虽然使用频率不如 forwhile 高,但在合适的场景下能写出更简洁、语义更明确的代码。

代码示例已上传至 GitHub 仓库,便于查阅和运行:

👉 https://github.com/baeldung/java-tutorials/tree/master/core-java-lang-syntax


原始标题:Java Do-While Loop | Baeldung