determina a ordem em que os statements são executados. O Java fornece condicionais (, ), loops (, , ) e instruções de ramificação (, , ) — além de melhorias modernas como switch expressions.
determina a ordem em que os statements são executados. O Java fornece condicionais (, ), loops (, , ) e instruções de ramificação (, , ) — além de melhorias modernas como switch expressions.
ifswitchforwhiledo-whilebreakcontinuereturnif (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else {
grade = "F";
}
// ternary — concise if/else for a value
String status = (age >= 18) ? "adult" : "minor";
switch (day) {
case 1: name = "Mon"; break; // ⚠️ break needed — else it FALLS THROUGH
case 2: name = "Tue"; break;
default: name = "Unknown";
}
O switch clássico requer break após cada case — esquecê-lo causa fall-through (a execução continua no próximo case), uma fonte notória de bugs.
// arrow syntax: no fall-through, returns a value, more concise
String name = switch (day) {
case 1 -> "Mon";
case 2 -> "Tue";
case 6, 7 -> "Weekend"; // multiple labels
default -> "Unknown";
};
A moderna switch expression elimina o fall-through, pode retornar um valor e é mais limpa — preferida em código novo.
// for — known iteration count
for (int i = 0; i < 10; i++) { ... }
// enhanced for-each — iterate a collection/array
for (String item : items) { ... }
// while — condition checked BEFORE each iteration
while (condition) { ... }
// do-while — body runs at least ONCE (condition checked after)
do { ... } while (condition);
for (int i = 0; i < 10; i++) {
if (i == 5) break; // exit the loop entirely
if (i % 2 == 0) continue; // skip to the next iteration
}
return result; // exit the method
// labeled break — exit nested loops
outer:
for (...) {
for (...) {
if (found) break outer; // breaks BOTH loops
}
}
break sai de um loop, continue pula para a próxima iteração, return sai do método, e breaks rotulados podem sair de loops aninhados de uma vez.
Control flow é o mecanismo básico para expressar lógica e decisões em qualquer programa — todo método não-trivial o usa.
Compreender os construtos e suas nuances é essencial: a armadilha de fall-through do switch (e a moderna switch expression mais segura), a diferença entre while e do-while (executar pelo menos uma vez), o for-each para iteração limpa de coleções, e as instruções de ramificação (incluindo breaks rotulados para loops aninhados).
Dominar isso — e preferir formas modernas, menos propensas a erros (switch expressions, for-each) — é fundamental para escrever lógica Java correta e legível, evitando bugs comuns de control flow.