Thinking In 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;爲止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章