for迴圈在第一次反覆之前要進行初始化。隨後,它會進行條件測試,而且在每一次反覆的時候,進行某種形式的“步進”(Stepping)。for迴圈的形式如下:
for(初始運算式; 布林運算式; 步進)
語句
無論初始運算式,布林運算式,還是步進,都可以置空。每次反覆前,都要測試一下布林運算式。若獲得的結果是false,就會繼續執行緊跟在for語句後面的那行代碼。在每次迴圈的末尾,會計算一次步進。
for迴圈通常用於執行“計數”任務:
//: ListCharacters.java// Demonstrates "for" loop by listing// all the ASCII characters.public class ListCharacters { public static void main(String[] args) { for( char c = 0; c < 128; c++) if (c != 26 ) // ANSI Clear screen System.out.println( "value: " + (int)c + " character: " + c); }} ///:~
注意變數c是在需要用到它的時候定義的——在for迴圈的控製表達式內部,而非在由起始花括弧標記的代碼塊的最開頭。c的範圍是由for控制的運算式。
以於象C這樣傳統的程式化語言,要求所有變數都在一個塊的開頭定義。所以在編譯器建立一個塊的時候,它可以為那些變數分配空間。而在Java和C++中,則可在整個塊的範圍內分散變數聲明,在真正需要的地方才加以定義。這樣便可形成更自然的編碼風格,也更易理解。
可在for語句裡定義多個變數,但它們必須具有同樣的類型:
for(int i = 0, j = 1; i < 10 && j != 11; i++, j++) /* body of for loop */;
其中,for語句內的int定義同時覆蓋了i和j。只有for迴圈才具備在控製表達式裡定義變數的能力。對於其他任何條件或迴圈語句,都不可採用這種方法。
1. 逗號運算子
早在第1章,我們已提到了逗號運算子——注意不是逗號分隔字元;後者用於分隔函數的不同自變數。Java裡唯一用到逗號運算子的地方就是for迴圈的控製表達式。在控製表達式的初始化和步進控制部分,我們可使用一系列由逗號分隔的語句。而且那些語句均會獨立執行。前面的例子已運用了這種能力,下面則是另一個例子:
//: CommaOperator.javapublic class CommaOperator { public static void main(String[] args) { for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) { System.out.println("i= " + i + " j= " + j); } }} ///:~
輸出如下:
i= 1 j= 11i= 2 j= 4i= 3 j= 6i= 4 j= 8
大家可以看到,無論在初始化還是在步進部分,語句都是順序執行的。此外,儘管初始化部分可設定任意數量的定義,但都屬於同一類型。