1. Overview
In this quick article, we’ll introduce continue and break Java keywords and focus on how to use them in practice.
Simply put, execution of these statements causes branching of the current control flow and terminates the execution of the code in the current iteration.
2. The break Statement
The break statement comes in two forms: unlabeled and labeled.
2.1. Unlabeled break
We can use the unlabeled statement to terminate a for, while or do-while loop as well as the switch-case block:
for (int i = 0; i < 5; i++) { if (i == 3) { break; } }
This snippet defines a for loop that is supposed to iterate five times. But when counter equals 3, the if condition becomes true and the break statement terminates the loop. This causes the control flow to be transferred to the statement that follows after the end of for loop.
In case of nested loops, an unlabeled break statement only terminates the inner loop that it’s in. Outer loops continue execution:
for (int rowNum = 0; rowNum < 3; rowNum++) { for (int colNum = 0; colNum < 4; colNum++) { if (colNum == 3) { break; } } }
This snippet has nested for loops. When colNum equals 3, the if the condition evaluates to true and the break statement causes the inner for loop to terminate. However, the outer for loop continues iterating.
2.2. Labeled break
We can also use a labeled break statement to terminate a for, while or do-while loop. A labeled break terminates the outer loop.
Upon termination, the control flow is transferred to the statement immediately after the end of the outer loop:
compare: for (int rowNum = 0; rowNum < 3; rowNum++) { for (int colNum = 0; colNum < 4; colNum++) { if (rowNum == 1 && colNum == 3) { break compare; } } }
In this example, we introduced a label just before the outer loop. When rowNum equals 1 and colNum equals 3, the if condition evaluates to true and the break statement terminates the outer loop.
The control flow is then transferred to the statement following the end of outer for loop.
3. The continue Statement
The continue statement also comes in two forms: unlabeled and labeled.
3.1. Unlabeled continue
We can use an unlabeled statement to bypass the execution of rest of the statements in the current iteration of a for, while or do-while loop. It skips to the end of the inner loop and continues the loop:
int counter = 0; for (int rowNum = 0; rowNum < 3; rowNum++) { for (int colNum = 0; colNum < 4; colNum++) { if (colNum != 3) { continue; } counter++; } }
In this snippet, whenever colNum is not equal to 3, the unlabeled continue statement skips the current iteration, thus bypassing the increment of the variable counter in that iteration. However, the outer for loop continues to iterate. So, the increment of counter happens only when colNum equals 3 in each iteration of the outer for loop.
3.2. Labeled continue
We can also use a labeled continue statement which skips the outer loop. Upon skipping, the control flow is transferred to the end of the outer loop, effectively continuing the iteration of the outer loop:
int counter = 0; compare: for (int rowNum = 0; rowNum < 3; rowNum++) { for (int colNum = 0; colNum < 4; colNum++) { if (colNum == 3) { counter++; continue compare; } } }
We introduced a label just before the outer loop. Whenever colNum equals 3, the variable counter is incremented. The labeled continue statement causes the iteration of outer for loop to skip.
The control flow is transferred to the end of the outer for loop, which continues with the next iteration.
4. Conclusion
In this tutorial, we’ve seen different ways of using the keywords break and continue as branching statements in Java.
The complete code presented in this article is available over on GitHub.