本文整理Java中的控制語句,羅列基礎中的不常見或者易忽略的語法。控制語句中還有最簡單的 if 語句,本文未列出。
Switch
- case語句匹配成功的分支執行,分支當中最後有“break;”語句的話,整個switch語句終止;分支當中沒有“break;”語句的話,直接進入下一個分支執行(不進行匹配),這種現象被稱爲
case穿透現象
【提供break;語句可以避免穿透】 - 所有分支都沒有匹配成功,若有default語句的話,則執行default分支當中的語句
- switch後面和case後面只能是int或者String類型的數據(JDK6只能探測int類型,JDK7及以後的版本能探測int或者String類型),不能是其他類型;byte, short, char可以直接寫到switch和case後面,因爲它們可以進行自動類型轉換
//switch後只能探測int或者String類型
long x = 10L;
switch(x){} //這裏的x會報錯,要求進行強制類型轉換
//char類型自動轉換爲int類型
char c = 'B';
switch(c){
case 'A':
System.out.println("高級!");
break;
case 66: //'B'對應的ASCII碼爲66,程序運行輸出爲“中級!”
System.out.println("中級!");
break;
}
- case合併
int x = 3;
switch(x){
case 1: case 3: case 10:
System.out.println("success!");
break;
}
for/while
- for死循環
for( ; ; ){ System.out.println(“死循環”);}
注:(1)for循環中的初始化表達式,布爾表達式,更新表達式都不是必需的;但兩個分號是必需的。(2)布爾表達式必須是true/false,不能是其他值 - while死循環
以下程序編譯報錯
while(true){
System.out.println("死循環!");
}
System.out.println("Hello!"); //編譯器分析出上面爲死循環,該條語句永遠不可到達,編譯報錯
同樣的,判斷以下程序編譯是否報錯
int y = 10;
int z = 3;
while(y > z){
System.out.println("哈哈");
}
System.out.println("嘿嘿"); //編譯通過,程序在運行期間才能訪問y和z
==================
while(10 > 3){
System.out.println("嘻嘻");
}
System.out.println("呵呵"); //編譯報錯,程序判斷上面的while陷入死循環,該語句不可達
- do…while循環
語法:
do{
循環體;
}while(布爾表達式); //注意這裏是有分號的
break/continue
(1)默認情況下,break語句終止的是離它最近的循環語句。當然也可以指定終止某個循環,需要給循環起名。採用這種語法:break 循環名稱;【用的較少】
for1:for(int i = 0; i < 3; i++){
for2:for(int j = 0; j < 10; j++){
if(j == 5){
break for1;
}
System.out.println("j=" + j); //執行結果爲打印出j=0 j=1 j=2 j=3 j=4;
}
}
(2)continue語句表示不再執行continue語句後的語句,繼續循環
for(int i = 0; i < 5; i++){
if(i == 2)
continue;
System.out.println("i=" + i); //打印的結果爲i=0 i=1 i=3 i=4
}