quyết định thứ tự thực thi các câu lệnh. Java cung cấp các câu lệnh điều kiện (, ), vòng lặp (, , ), và các câu lệnh rẽ nhánh (, , ) — cùng với các cải tiến hiện đại như switch expression.
ifswitchforwhiledo-whilebreakcontinuereturnif (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else {
grade = "F";
}
// ternary — if/else súc tích cho một giá trị
String status = (age >= 18) ? "adult" : "minor";
switch (day) {
case 1: name = "Mon"; break; // ⚠️ cần break — nếu không sẽ FALL THROUGH
case 2: name = "Tue"; break;
default: name = "Unknown";
}
switch cổ điển yêu cầu break sau mỗi case — quên nó sẽ gây fall-through (thực thi tiếp tục chạy sang case kế tiếp), một nguồn bug khét tiếng.
// cú pháp mũi tên: không fall-through, trả về một giá trị, súc tích hơn
String name = switch (day) {
case 1 -> "Mon";
case 2 -> "Tue";
case 6, 7 -> "Weekend"; // nhiều nhãn
default -> "Unknown";
};
switch expression hiện đại loại bỏ fall-through, có thể trả về một giá trị, và gọn gàng hơn — được ưu tiên trong code mới.
// for — biết trước số lần lặp
for (int i = 0; i < 10; i++) { ... }
// for-each nâng cao — duyệt một collection/array
for (String item : items) { ... }
// while — điều kiện được kiểm tra TRƯỚC mỗi lần lặp
while (condition) { ... }
// do-while — thân vòng lặp chạy ít nhất MỘT lần (điều kiện kiểm tra sau)
do { ... } while (condition);
for (int i = 0; i < 10; i++) {
if (i == 5) break; // thoát hẳn vòng lặp
if (i % 2 == 0) continue; // nhảy sang lần lặp kế tiếp
}
return result; // thoát khỏi phương thức
// labeled break — thoát các vòng lặp lồng nhau
outer:
for (...) {
for (...) {
if (found) break outer; // thoát CẢ HAI vòng lặp
}
}
break thoát một vòng lặp, continue nhảy sang lần lặp kế tiếp, return thoát khỏi phương thức, và labeled break có thể thoát các vòng lặp lồng nhau cùng lúc.
Control flow là cơ chế cơ bản để biểu diễn logic và quyết định trong bất kỳ chương trình nào — mọi phương thức không tầm thường đều dùng nó.
Hiểu các cấu trúc và sắc thái của chúng là thiết yếu: cái bẫy fall-through của switch (và switch expression hiện đại an toàn hơn), sự khác biệt giữa while và do-while (chạy ít nhất một lần), for-each để duyệt collection gọn gàng, và các câu lệnh rẽ nhánh (gồm cả labeled break cho vòng lặp lồng nhau).
Thành thạo những thứ này — và ưu tiên các dạng hiện đại, ít gây lỗi hơn (switch expression, for-each) — là nền tảng để viết logic Java đúng đắn, dễ đọc và tránh các bug control-flow phổ biến.