The continue Statement
A continue
statement stops the current iteration of an iteration statement and transfers control to the start of the next iteration:
A continue
statement must occur within a while
, for
, or do
statement or the compiler issues an error message.
If a continue
statement does not contain an identifier, the statement stops the current iteration in the innermost enclosing while
, for
, or do
statement and attempts to transfer control to the start of the next iteration. This means that in a while
or do
statement, the continue
statement transfers control to just after the contained statement of the while
or do
statement. In a for
statement, the continue
statement transfers control to the increment portion of the for
statement. Here is an example of a continue
statement that contains no identifier:
public static void main (String[] argv) { for (int i=0; i<=15; i++) { System.out.println(i); if ( (i&1) == 0 ) continue; System.out.println("That's odd"); } }
The above example outputs the numbers 0 through 15, printing "That's odd" after each odd number.
The innermost while
, for
, do
, or switch
statement that encloses the continue
statement must be in the immediately enclosing method or initializer block. The continue
statement in the following example is used incorrectly and generates an error:
while (true) { class X { void doIt() { continue; } } new X().doIt(); }
If a continue
statement contains an identifier, the identifier must be defined as the label of an enclosing while
, for
, or do
statement. A continue
statement that contains an identifier stops the current iteration of the labeled iteration statement and attempts to transfer control to the start of the next iteration of that loop. Here is an example of a continue
statement that contains an identifier:
public boolean search(int x, int a[][]) { int count = 0; top: for (int i=0; i<a.length; i++) { int b[] = a[i]; for (int j=0; j < b.length; j++) { if (x == b[j]) return true; if ( x < b[j]) continue top; } // for j count++; if (count > 100) return false; } // for i return false; } // search()
The above method searches an array of arrays of integers for a specified value. The method assumes that the values in the sub-arrays are in descending order. The method gives up after checking 100 values.
The label used in a continue
statement must be in the immediately enclosing method or initializer block.
The statement to which a continue
statement attempts to transfer control is called the target statement. If a continue
statement occurs inside a try
statement, control may not immediately transfer to the target statement. If a try
statement has a finally
clause, the finally
block is executed before control leaves the try
statement for any reason. This means that if a continue
statement occurs inside a try
statement (but not in its finally
block) and the target statement is outside of the try
statement, the finally
block is executed first, before the control transfer can take place.
If the finally
block contains a break
, continue
, return
, or throw
statement, the pending control transfer for the previously executed continue
statement is forgotten. Instead, control is transferred to the target of the break
, continue
, return
, or throw
statement in the finally
block.
If the finally
block does not contain a break
, continue
, return
, or throw
statement, the pending control transfer happens after the finally
block is done executing, unless the target statement is enclosed by another try
statement. If there is another enclosing try
statement and it has a finally
clause, that finally
block is also executed before the control transfer can take place. Execution proceeds in this manner until the target statement of the continue
is executed.
References Identifiers; Labeled Statements; The break Statement; The do Statement; The for Statement; The return Statement; The throw Statement; The try Statement; The while Statement