官术网_书友最值得收藏!

2.4 控制流程語句

控制流程語句用于控制程序按照一定流程來執行。

2.4.1 if-then

if-then語句是指只有if后面是true時才執行特定的代碼。

如果if后面是false,就跳到if-then語句后面。語句可以省略中括號,例如:

注意

語句可以省略中括號,但在編碼規范里面不推薦使用,因為極易讓人看錯。

2.4.2 if-then-else

if-then-else語句在if后面是false時提供了第二個執行路徑。

下面是一個完整的例子:

輸出為:

   Grade = C

2.4.3 switch

switch語句可以有許多可能的執行路徑,可以使用byte、short、char和int基本數據類型,也可以是枚舉類型、String以及少量的原始類型的包裝類Character、Byte、Short和Integer。

下面是一個SwitchDemo例子:

其中,break語句是為了終止switch語句。

以下是一個不使用switch語句的例子:

輸出為:

   August
   September
   October
   November
   December

從技術上來說,最后一個break并不是必需的,因為流程跳出switch語句,但是仍然推薦使用break,主要是防止在修改代碼后造成遺漏而出錯。default用于處理所有不明確值的情況。

下面的例子展示了多個case對應一個結果的情況:

輸出為:

   Number of Days = 29

從Java 7開始,可以在switch語句里面使用String,下面給出一個例子:

輸出為:

   8

注意

switch語句表達式中不能有null。

2.4.4 while

while語句在判斷條件是true時執行語句塊,語法如下:

while語句計算的表達式必須返回boolean值。如果表達式計算為true,while語句執行while塊的所有語句。while語句繼續測試表達式,然后執行它的塊,直到表達式計算為false。

以下是一個完整的例子:

輸出為:

   Count is: 1
   Count is: 2
   Count is: 3
   Count is: 4
   Count is: 5
   Count is: 6
   Count is: 7
   Count is: 8
   Count is: 9
   Count is: 10

用while語句可以實現一個無限循環,示例如下:

2.4.5 do-while

do-while語句的語法如下:

   do {
       statement(s)
   } while (expression);

do-while語句和while語句的區別是,do-while計算表達式時在循環的底部,而不是頂部,do塊的語句至少會執行一次。

以下是一個示例:

輸出為:


   Count is: 1
   Count is: 2
   Count is: 3
   Count is: 4
   Count is: 5
   Count is: 6
   Count is: 7
   Count is: 8
   Count is: 9
   Count is: 10

2.4.6 for

for語句提供一種緊湊的方式來遍歷一個范圍值,該語句也被稱為“for循環”,因為它反復循環,直到滿足特定的條件。for語句的通常形式表述如下:

   for (initialization; termination; increment) {
      statement(s)
   }

使用for語句時要注意:

· initialization初始化循環,執行一次,作為循環的開始。

· 當termination計算為false時,循環結束。

· increment會在循環中迭代執行。該表達式可以接受遞增或者遞減的值。

以下是一個示例:

輸出為:

   Count is: 1
   Count is: 2
   Count is: 3
   Count is: 4
   Count is: 5
   Count is: 6
   Count is: 7
   Count is: 8
   Count is: 9
   Count is: 10

注意,代碼是在initialization中聲明變量的。該變量的存活范圍從它的聲明到for語句塊的結束為止。所以,它可以用在termination和increment中。如果控制for語句的變量不需要在循環外部使用,那么最好是在initialization中聲明。變量命名為i、j、k是經常用來控制for循環的。在initialization中聲明它們,可以限制它們的生命周期,減少錯誤。

for循環的3個表達式都是可選的,如果想表達無限循環,可以這么寫:

for語句還可以用來迭代集合和數組,這個形式有時被稱為增強的for語句,可以用來讓你的循環更加緊湊,易于閱讀。為了說明這一點,考慮下面的數組:

   int[] numbers = {1,2,3,4,5,6,7,8,9,10};

使用增強的for語句來循環數組:

輸出:

   Count is: 1
   Count is: 2
   Count is: 3
   Count is: 4
   Count is: 5
   Count is: 6
   Count is: 7
   Count is: 8
   Count is: 9
   Count is: 10

盡可能使用這種形式的for替代傳統的for形式。

2.4.7 break

break語句有兩種形式:標簽和非標簽。在前面的switch語句中,看到的break語句就是非標簽形式。可以使用非標簽break結束for、while、do-while循環,例如:

這個程序在數組中查找數字12。當找到值時,break語句會結束for循環,控制流跳轉到for循環后面的語句。程序輸出是:

   Found 12 at index 4

無標簽break語句結束最里面的switch、for、while、do-while語句,而標簽break結束最外面的語句。接下來的程序(BreakWithLabelDemo)類似前面的程序,但使用嵌套循環在二維數組里尋找一個值。值找到后,標簽break語句結束最外面的for循環:

程序輸出是:

   Found 12 at 1, 0

break語句結束標簽語句,不傳送控制流到標簽處。控制流傳送緊隨標記聲明。

注意

Java沒有類似于C語言的goto語句,帶標簽的break語句實現了類似的效果。

2.4.8 continue

continue語句忽略for、while、do-while的當前迭代。非標簽模式忽略最里面的循環體,然后計算循環控制的boolean表達式。接下來的程序(ContinueDemo)通過一個字符串計算字母“p”出現的次數:如果當前字符不是p,continue語句跳過循環的其他代碼,然后處理下一個字符;如果當前字符是p,程序自增字符數。

程序輸出:

   Found 9 p's in the string

為了更清晰地看出效果,嘗試去掉continue語句,重新編譯。再跑程序,count將是錯誤的,輸出是35,而不是9。

帶標簽的continue語句忽略標簽標記外層循環的當前迭代。下面的程序例子(ContinueWithLabelDemo)使用嵌套循環在字符串的子串中搜索子串。需要兩個嵌套循環:一個迭代子串,一個迭代正在被搜索的子串。下面的程序ContinueWithLabelDemo使用continue的標簽形式忽略最外層的循環。

這里是程序輸出:

   Found it

2.4.9 return

最后的分支語句是return語句。return語句從當前方法退出,控制流返回到方法調用處。return語句有兩種形式:一個返回值,一個不返回值。為了返回一個值,簡單在return關鍵字后面把值放進去(或者放一個表達式計算):

return值的數據類型必須和方法聲明的返回值類型符合。當方法聲明為void時,使用如下形式的return不需要返回值:

主站蜘蛛池模板: 莒南县| 西青区| 合作市| 陵川县| 安陆市| 略阳县| 临汾市| 上杭县| 凭祥市| 西畴县| 平罗县| 松江区| 武平县| 开江县| 太保市| 禄劝| 塘沽区| 故城县| 禹城市| 临汾市| 滨海县| 福州市| 肇州县| 涡阳县| 巴林左旗| 微山县| 新干县| 漳浦县| 吴旗县| 郑州市| 思茅市| 广德县| 田阳县| 东海县| 乐昌市| 旌德县| 新乡市| 九龙坡区| 漳平市| 电白县| 芒康县|