Java程序流程控制
流程控制語句是用來控制程序中各語句執行順序的語句,可以把語句組合成能完成一定功能的小邏輯模塊。
程序流程控制的分類
- 順序結構
- 程序從上到下逐行地執行,中間沒有任何判斷和跳轉。
- 分支結構
- 根據條件,選擇性地執行某段代碼。
- 有if…else和switch-case兩種分支語句。
- 循環結構
- 根據循環條件,重複性的執行某段代碼。
- 有while、 do…while、 for三種循環語句。
- 注: JDK1.5提供了foreach循環,方便的遍歷集合、數組元素
順序結構
Java中定義成員變量時採用合法的前向引用
分支結構
if…else語句
if(條件表達式1){
執行代碼塊1;
}
else if (條件表達式2){
執行代碼塊2;
}
……
else{
執行代碼塊n;
}
注意事項
- 條件表達式必須是布爾表達式(關係表達式或邏輯表達式)、布爾變量
- 語句塊只有一條執行語句時,一對{}可以省略,但建議保留
- if-else語句結構,根據需要可以嵌套使用
- 當if-else結構是“多選一”時,最後的else是可選的,根據需要可以省略
- 當多個條件是“互斥”關係時,條件判斷語句及執行語句間順序無所謂
- 當多個條件是“包含”關係時,“小上大下 / 子上父下”
switch-case語句
switch(表達式){
case 常量1:
語句1;
// break;
case 常量2:
語句2;
// break;
… …
case 常量N:
語句N;
// break;
default:
語句;
// break;
}
注意事項
- switch(表達式)中表達式的值必須是下述幾種類型之一: byte, short,char, int, 枚舉 (jdk 5.0), String (jdk 7.0);
- case子句中的值必須是常量,不能是變量名或不確定的表達式值;
- 同一個switch語句,所有case子句中的常量值互不相同;
- break語句用來在執行完一個case分支後使程序跳出switch語句塊;如果沒有break,程序會順序執行到switch結尾
- default子句是可任選的。同時,位置也是靈活的。當沒有匹配的case時,執行default
switch和if語句的對比
if和switch語句很像,具體什麼場景下,應用哪個語句呢?
- 如果判斷的具體數值不多,而且符合byte、 short 、 char、 int、 String、枚舉等幾
種類型。雖然兩個語句都可以使用,建議使用swtich語句。因爲效率稍高。 - 其他情況:對區間判斷,對結果爲boolean類型判斷,使用if, if的使用範圍更廣。
也就是說, 使用switch-case的,都可以改寫爲if-else。反之不成立。
循環結構
循環語句的四個組成部分:
- 初始化部分(init_statement)
- 循環條件部分(test_exp)
- 循環體部分(body_statement)
- 迭代部分(alter_statement)
for 循環
語法格式
for (①初始化部分; ②循環條件部分; ④迭代部分){
③循環體部分;
}
執行過程
①-②-③-④-②-③-④-②-③-④-…-②
注意事項
- ②循環條件部分爲boolean類型表達式,當值爲false時,退出循環
- ①初始化部分可以聲明多個變量,但必須是同一個類型,用逗號分隔
- ④可以有多個變量更新,用逗號分隔
while 循環
語法格式
①初始化部分
while(②循環條件部分){
③循環體部分;
④迭代部分;
}
執行過程
①-②-③-④-②-③-④-②-③-④-…-②
注意事項
- 注意不要忘記聲明④迭代部分。 否則, 循環將不能結束, 變成死循環。
- for循環和while循環可以相互轉換
do-while 循環
語法格式
①初始化部分;
do{
③循環體部分
④迭代部分
}while(②循環條件部分);
執行過程
①-③-④-②-③-④-②-③-④-…②
注意事項
- do-while循環至少執行一次循環體。
嵌套循環
將一個循環放在另一個循環體內,就形成了嵌套循環。其中,for ,while ,do…while均可以作爲外層循環或內層循環。
實質上,嵌套循環就是把內層循環當成外層循環的循環體。當只有內層循環的循環條件爲false時,纔會完全跳出內層循環,纔可結束外層的當次循環,開始下一次的循環。
設外層循環次數爲m次,內層爲n次,則內層循環體實際上需要執行m*n次。
特殊關鍵字break、 continue、return的使用
break
- break語句用於終止某個語句塊的執行
- break語句出現在多層嵌套的語句塊中時,可以通過標籤指明要終止的是哪一層語句塊
下圖break結束的是label3的語句塊
continue
- continue只能使用在循環結構中
- continue語句用於跳過其所在循環語句塊的一次執行,繼續下一次循環
- continue語句出現在多層嵌套的循環語句體中時,可以通過標籤指明要跳過的是哪一層循環
return
- return:並非專門用於結束循環的,它的功能是結束一個方法。當一個方法執行到一個return語句時,這個方法將被結束。
- 與break和continue不同的是, return直接結束整個方法,不管這個return處於多少層循環之內。
注意事項
- break只能用於switch語句和循環語句中。
- continue 只能用於循環語句中。
- 二者功能類似,但continue是終止本次循環, break是終止本層循環。
- break、 continue之後不能有其他的語句,因爲程序永遠不會執行其後的語句。
- 標號語句必須緊接在循環的頭部。標號語句不能用在非循環語句的前面。
- 很多語言都有goto語句, goto語句可以隨意將控制轉移到程序中的任意一條語句上,然後執行它。但使程序容易出錯。 Java中的break和continue是不同於goto的。