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不需要返回值:

- Getting Started with React
- 深入淺出Spring Boot 2.x
- 少年輕松趣編程:用Scratch創作自己的小游戲
- 匯編語言程序設計(第2版)
- 深度強化學習算法與實踐:基于PyTorch的實現
- WordPress Plugin Development Cookbook(Second Edition)
- C#程序設計基礎:教程、實驗、習題
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- 智能搜索和推薦系統:原理、算法與應用
- OpenCV with Python By Example
- Serverless Web Applications with React and Firebase
- 創意UI:Photoshop玩轉APP設計
- HTML5+CSS3+jQuery Mobile APP與移動網站設計從入門到精通
- 區塊鏈項目開發指南
- Web程序設計:ASP.NET(第2版)