1. 程式人生 > >Chapter4_控制執行流程

Chapter4_控制執行流程

方向 布爾 作用 ue4 back 例子 限制 取出 ()

總結java中所有的與流程控制有關的知識

(1)表達式判斷

  Java中只允許true或者false來作為判斷條件,不允許用0或者非0值作為判斷條件。

(2)if-else

  與流程密切相關的語句,決定了語句應該往哪個方向發展,與代碼的邏輯結構密切相關。

(3)叠代

  下面的語句被劃分為叠代語句

  (A)while/do-while

    兩者的唯一區別就是do-while中的語句至少會被執行一次,即是表達式裏面的值一開始計算就是false。但對於while,如果第一次計算的結果是false,則循環體裏的語句不會執行。

  (B)for

    for循環中要註意的首先是,初始化表達式,布爾表達式,步進運算都可以為空。另外一個就是for循環是Java中唯一用到了逗號操作符的地方,在控制表達式的三個部分中,可以使用一系列由逗號分隔的語句,並且這些語句會獨立執行。在一個控制表達式中,定義多個變量的能力只限於for循環使用。

  (C)foreach語法

    foreach語法不必要創建int變量去對由訪問項構成的序列進行計數。例如如下的幾個例子。

    分開輸出一個字符串中的所有字符:

 1 public class test {
 2     public static void main(String[] args){
 3         String s = "don‘t look back in anger";
 4         for(char c : s.toCharArray())
 5             System.out.print(c + " ");
 6     }
7 } 8 9 output: 10 d o n ‘ t l o o k b a c k i n a n g e r

    foreach語法不僅能夠節省時間,更重要的是能夠努力說明你正在做的事情,比如把數組中的每一個元素都獲取出來。

(4)return

  return語句指明你希望在何處讓方法返回或者退出,或返回一個什麽樣的值。

(5)break和continue

  break退出當前的叠代,continue退出當前這一次叠代然後開始進行下一次叠代。

(6)goto與標簽

  在Java中,實際上沒有goto語句的支持,但是Java中有類似的機制存在,即標簽。在Java中,標簽唯一起作用的地方是在叠代語句之前,這句話的內涵在於,在標簽和叠代語句之間插入任何語句都是不合適的。幾種label的行為機制如下。

1 label1:
2 outer-iteration{
3     inner-iteration{
4         break;    (1)
5         continue;    (2)
6         continue label1;    (3)
7         break label1;    (4)
8     }        
9 }

  在(1)中,break中斷內部叠代,回到外部叠代。(2)中,continue中斷當前內部叠代,繼續進行當前內部叠代。(3)中,continue中斷當前叠代,重新從label1處進入外部叠代。(4)中,break中斷所有叠代,並且不再進入外部叠代。下面是一個label用於for循環的例子。

 1 public class test {
 2     public static void main(String[] args){
 3         int i = 0;
 4         outer:
 5             for(;true;)
 6                 inner:
 7                     for(;i < 10; i++){
 8                         System.out.println("i = " + i);
 9                         if(i == 2){
10                             System.out.println("continue");
11                             continue;
12                         }
13                         if(i == 3){
14                             System.out.println("break");
15                             i++;
16                             break;
17                         }
18                         if(i == 7){
19                             System.out.println("continue outer");
20                             i++;
21                             continue outer;
22                         }
23                         if(i == 8){
24                             System.out.println("break outer");
25                             break outer;
26                         }
27                         for(int k = 0;k < 5; k++){
28                             if(k == 3){
29                                 System.out.println("continue inner");
30                                 continue inner;
31                             }
32                         }
33                     }
34     }
35 }

  這個例子中一個有趣的地方是,如果將15行的i++註釋掉的話,程序會陷入死循環。這告訴我們在for循環體中,循環中的代碼執行完後的最後一句才是步進操作,如果在之前用break語句退出循環,步進操作不會執行。細心的話可以發現在11行的continue之前並沒有手動給i進行步進,但是步進操作還是進行了,這說明單個的continue在進行下一次內層循環的同時仍然可以進行自增操作。但是21行的continue加標簽的上一句,需要手動給i進行步進,這是因為這種continue的形式不會繼續進行循環體中的步進操作了,而是直接跳轉到標簽代碼處。

  規則總結為:

  (1)單個的continue會終止當前循環並且回到內層循環的頭部重新開始(步進,判斷等操作仍然會執行)。

  (2)continue後跟標簽會無條件跳轉至標簽處。

  (3)單個的break會終止並且跳出當前循環(只能跳出內層)。

  (4)break加標簽可以中斷並跳出標簽所指的循環。

(7)switch

  switch更多的時候被劃分為一種選擇語句,根據整數表達式的值,switch語句可以從一系列代碼中選擇一段執行。

  switch的標準格式如下:

1 switch(integral-selector){
2     case integral-value1 : statement : break;
3     case integral-value2 : statement : break;
4     case integral-value3 : statement : break;
5     case integral-value4 : statement : break;
6     case integral-value5 : statement : break;
7     default: statement;    
8 }

  其中,integral-selector稱作整數選擇因子,是一個能夠產生整數值的表達式,switch語句將這個值與每一個integral-value比較,如果發現相等的,就選擇執行,否則就執行再default裏面的語句。每個case都以一個break結尾,如果有這個break存在,程序會在結束時跳出switch結構體,反之會繼續進行,直到遇到一個break為止。switch是一個實現多路選擇的有利工具,但是只能使用char或者int這樣的整數值,但是與enum相聯系可以減弱這種限制。

  下面是一個使用switch的例子。 

 1 public class test {
 2     public static void main(String[] args){
 3         String s = "though nothing can keep us together";
 4         for(char c : s.toCharArray()){
 5             switch(c){
 6                 case ‘a‘:
 7                 case ‘e‘:
 8                 case ‘i‘:
 9                 case ‘o‘:
10                 case ‘u‘:System.out.println(c + " is vowel");
11                          break;
12                 default:System.out.println(c + " is not vowel");
13             }
14         }
15     }
16 }

  多個case可以重疊在一起,形成多重匹配,只要符合那些條件中的一種,就會執行那一段代碼。

Chapter4_控制執行流程