標籤:控制 執行流程 for continue java流程式控制制
第四章 控制執行流程
Java中使用了C的所有流程式控制制語句。在Java中涉及的關鍵字包括if-else,while,do-while,for,return,break,continue以及選擇語句switch。然而Java不支援goto語句(該語句引起了許多的反對意見),但是Java仍然可以類似goto那樣跳轉。
4.1 True和False
所有的條件陳述式都利用條件運算式的真假來決定執行的路徑。Java中不允許我們將一個數字作為boolean值使用,雖然C和C++中是允許的(“非零”為真,”零”為假)。
4.2 if-else
if-else語句是控製程序流程最基本形式。其中else是可選的。有如下兩種使用的方式:
if(boolean-exp){ ...}if(boolean-exp){ ...} else { ...}
4.3迭代
while,do-while,for用來控制迴圈,有時將她們劃分為迭代語句(iteration statement)。語句會重複執行直到條件滿足或者條件不滿足。while語句的格式如下:
while(boolean-exp){ ...}
再迴圈剛開始的時候,會計算一次boolean-exp的值,而在語句的下次迭代開始前會再計算一次。
4.3.1 do-while
do-while和while唯一區別就是do-while中的語句至少會執行一次。
4.3.2 for迴圈
for迴圈在第一次迭代之前要進行初始化,之後會進行條件測試,每次迴圈結束之後都以某種方式步進。
4.3.3 逗號操作符
逗號操作符(不是逗號分隔字元),Java中唯一用到逗號操作符的地方就是for迴圈的控製表達式。在控製表達式的初始化和步進控制部分,可以使用一系列的逗號分隔的語句;
4.4 Foreach文法
Java SE5引入了一種更加簡潔的for語句用於數組和容器,能簡易的遍曆每一項。
public class Test{ public static void main(String[] args){ Random rand = new Random(47); float f[] = new float[10]; for(int i = 0; i < 10; i ++) f[i] = rand.nextFloat(); for(floar x : f) System.out.println(x); }}
foreach語句能試用於任何的實現了Iterable介面的對象。使用foreach不僅在錄入代碼時可以節省時間,更重要的是,它閱讀起來也要容易得多,它閱讀起來也要容易得多,閱讀起來能讓人明白正在做什麼,而不是類似於for(int i=0; i<100;i++)的告訴人如何做的細節。
4.5 return
Java中有如下幾個關鍵詞表示無條件跳轉,return、break、continue和一種類似於其他語言中goto的標記。
return有兩方面的用途:
- 一方面指定一個方法返回什麼值(假設它沒有void傳回值)
- 另一方面會導致當前的方法退出,並返回那個值。
4.6 break和continue
在任何迭代語句的主體部分,都可用break和continue控制迴圈的流程。break關鍵字用於強行退出迴圈,不執行迴圈中剩餘的部分。continue則是停止當前執行的一次迴圈,直接開始下一次的迴圈迭代。下面的例子:
public class Test { public static void main(String[] args) { for(int i=0; i<100; i++) { if(i == 74) break; if(i%9 != 0)continue; System.out.println(i + " "); } }}
上面的輸出結果為:
0 9 18 27 36 45 54 63 72
到74的時候就break出來了,而當i不能被9整除時,continue(也就是繼續下一次迴圈)。
4.7 臭名昭著的goto
goto語句實際上起源於組譯工具的程式控制: 若條件A成立,則跳到這裡;否則跳到那裡。如果閱讀由編譯器最終產生的彙編代碼,就會發現程式控制裡麵包含了很多的跳轉。(Java編譯器產生它自己的”彙編代碼”,運行在Java虛擬機器上面,而不是直接在cpu硬體上面的)。
goto是在源碼級上面的跳轉。不多介紹了,最好不用,用了會使原始碼變的很難閱讀。
4.8 switch
switch有時也被規劃成一種選擇語句。根據整數運算式的值,switch語句可以從一系列代碼中選出一段去執行,格式如下:
switch(integeral-selector) { case integral-value1 : statement1 ; break; case integral-value2 : statement2 ; break; case integral-value3 : statement3 ; break; default: statement4;}
integeral-selecotr是一個能夠產生整數值的運算式,switch能將這個結果與每個integral-value(整數值)相比較。若發現相符的,就執行下面對應的語句。若沒發現相符的語句,就執行default中包含的語句塊。
每個case最後都有一個break;語句這樣可以使執行流程跳轉到switch主體的末尾。如果case中沒有break,則會繼續執行後面的case語句,不管是否滿足case,直到遇見第一個break;為止。
Thinking In Java筆記(第四章 控制執行流程)