【Java】java控制的那些事(最全知識點)
學習一門語言,最基礎的不過控制語句,語言之間互通性最高的也是控制語句,如果你連控制語句都沒搞懂,都不熟悉,那麼你的編程之路註定不順利,所以奔本篇詳細介紹了控制語句的各類知識點
文章目錄
流程控制語句
流程控制語句分類:
- 順序結構
- 選擇結構
- 循環結構
順序結構
- 順序結構是最基本的流程
- 順序結構的特點: 從上往下依次進行
選擇結構
if語句
if語句第一種格式的基本使用
-
選擇結構:
- 也被稱爲分支結構
-
選擇結構有2種:
- if語句
- switch語句
-
if語句的第一種格式: 只使用if
// 格式
if(關係表達式) {
語句體
}
// 示例
int a = 0;
if(a == 1) {
System.out.println("a等於1");
}
- 第一種格式的執行流程:
- 首先判斷關係表達式的結果是true還是false
- 如果是true就執行語句體
- 如果是false就不執行語句體
- 首先判斷關係表達式的結果是true還是false
if語句第二種格式的基本使用
- if語句的第二種格式: if…else…
- 第二種格式的執行流程:
- 首先判斷關係表達式看其結果是true還是false
- 如果是true就執行語句體1
- 如果是false就執行語句體2
if語句第三種格式的基本使用
- if語句的第三種格式: if…else if…else
// 格式
if(關係表達式1) {
語句體1
} else if (關係表達式2) {
語句體2
}...{
} else { // else {} 是可選的
語句體n
}
- 第三種格式的執行流程:
- 首先判斷關係表達式1, 看其結果是true還是false
- 如果是true就執行語句體1
- 如果是false就繼續判斷關係表達式2, 看其結果是true還是false
- 如果是true就執行語句體2
- 如果是false就繼續判斷關係表達式3, 看其結果是true還是false
- …
- 如果沒有任何關係表達式爲true, 就執行else中的語句體
- 首先判斷關係表達式1, 看其結果是true還是false
- 能不能省略最後的else? 可以
switch語句的格式和執行流程
- switch語句的格式
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
case 值n:
語句體n;
break;
default:
語句體n+1;
break;
}
- 說明
- switch表達式允許的數據類型:
- byte, short, char, int
- 都是可隱式轉換爲int的類型, 因爲byte, short, char可以隱式轉換爲int, 所以也可以使用
- JDK5起可以是枚舉類型
- JDK7起可以是String
- 小括號中可以是常量, 也可以是變量
- byte, short, char, int
- case後面的值:
- 用來和表達式的值進行匹配
- 值只能是常量
- 值的類型應該和switch小括號中值的類型一致
- break: 中斷
- default: 當所有case都不匹配時, 執行default
- switch表達式允許的數據類型:
- 執行流程
- 首先計算表達式的值
- 然後執行符合的case
- 如果沒有符合的case, 則執行default
循環控制語句
- 循環語句: 在滿足循環條件的情況下, 反覆執行某段代碼.
- 循環體: 這段被重複執行的代碼
- 循環的停止:
- 在合適的時候將循環判斷條件修改爲false, 從而結束循環. 否則循環將一直執行下去, 形成死循環
- 循環語句的組成
- 初始化語句: 一條語句(一條語句可以初始化多個變量), 這些語句完成一些初始化操作
- 判斷條件語句: boolean表達式, 這個表達式能決定是否執行循環體
- 循環體語句: 要重複做的事情
- 控制條件語句: 控制循環結束
- 3種循環結構語句
- for循環
- while循環
- do…while循環
for循環
- 格式
// 格式
for(初始化語句; 判斷條件語句; 控制條件語句) {
循環體語句;
}
// for循環適用於知道循環多少次的情況
// 示例
for (int i = 1; i <= 5; i++) {
System.out.println("我錯了");
syso(i);
}
- 執行流程
- 先執行初始化語句
- 然後執行判斷條件語句
- 如果爲true, 則執行循環體語句
- 循環體語句執行完畢後, 執行控制條件語句
- 從步驟2重複
- 如果爲false, 則for循環結束
- 如果爲true, 則執行循環體語句
- 初始化語句只能有一句嗎?
- 只能有一句
- 但注意, 一句可以初始化多個變量:
int i = 0, j = 1, k = 1;
// 初始化多個變量來控制循環的情況
for(int i = 0, j = 10; i < 10 && j > 5; i++, j--) {
System.out.println(i + ", " + j);
}
// 輸出結果
i=0, j=10
i=1, j=9
i=2, j=8
i=3, j=7
i=4, j=6
- 注意: 初始化語句在循環中只執行一次
while循環格式和基本使用
- while循環的格式:
// while普通格式
while(判斷條件語句) {
循環體語句;
}
// 普通格式示例
while(i < 100) {
syso(i);
}
-----
// while擴展版格式
初始化語句;
while(判斷條件語句) {
循環體語句;
控制條件語句;
}
// 擴展版示例
int i = 0;
while(i < 100) {
syso(i);
i++;
}
- while循環的執行流程:
- 先執行關係表達式
- 如果關係表達式爲true, 則執行循環體
- 循環體執行完後, 繼續執行關係表達式
- 如果關係表達式爲false, 則循環結束
- 如果關係表達式爲true, 則執行循環體
- 先執行關係表達式
- while循環和for循環的相互轉換:
// while
int i = 0;
while(i < 100) {
syso(i);
i++;
}
// for
for(int i = 0; i < 100; i++) {
syso(i);
}
do…while循環格式及基本使用
- 語句格式:
// 普通格式
do {
循環體語句;
} while(判斷條件語句);
// 擴展格式:
初始化語句;
do {
循環體語句;
控制條件語句;
} while(判斷條件語句);
- 執行流程:
- 執行初始化語句
- 執行循環體語句
- 執行控制條件語句
- 執行判斷條件語句, 看是true還是false
- 如果是false, 則結束循環
- 如果是true, 回到2繼續執行循環體語句
for, while, do…while三種循環的區別
-
區別
- do…while: 至少執行一次循環體
- for, while: 必須判斷條件成立, 纔可以執行循環體
-
for循環的初始化語句的作用域: for的大括號內
-
思考:
- for的初始化表達式能否定義在for循環外? 可以, 定義在for循環前
- for循環的()之內的三個表達式能否有多條? 可以
控制循環語句
- 2個控制循環語句:
break
: 直接結束循環, 或switch語句continue
: 結束本次循環, 繼續執行下一次
break跳轉控制語句的概述和基本使用
- break的使用場景: 不能單獨使用, 必須用於switch或循環中
- break的作用:
- 在switch語句中, 用於結束case
- 在循環中, 用於結束所在的循環
continue跳轉控制語句
- continue的使用場景: 循環中
- continue的作用: 結束本次循環, 繼續下一次的循環
控制跳轉語句分析
擴展
- switch語句的case穿透
- 如果switch的case語句中沒有break, 則會繼續執行下一個case的代碼, 這稱爲case穿透
- case穿透有時會導致代碼出現問題, 但有時我們也利用case穿透簡化代碼
int a = 2;
switch (a) {
case 1:
System.out.println("進入1");
break;
case 2:
System.out.println("進入2");
case 3:
System.out.println("進入3");
break;
}
會輸出:
進入2
進入3
- if語句不寫大括號的格式
- 當if語句不寫大括號時, 只有if語句後的第一條語句算作if語句的語句體, 其餘不算
// 示例
if (false) {
System.out.println("這條語句不會被執行");
System.out.println("這條語句不會被執行");
}
// 去掉大括號後
if (false)
System.out.println("這條語句不會被執行");
System.out.println("這條語句會被執行");
// 相當於
if (false) {
System.out.println("這條語句不會被執行");
}
System.out.println("這條語句會被執行");
- while語句, for語句不寫大括號的格式
- 當語句不寫大括號時, 只有語句後的第一條語句算作語句的語句體, 其餘不算
// 示例
while (false) {
System.out.println("這條語句不會被執行");
System.out.println("這條語句不會被執行");
}
// 去掉大括號後
while (false)
System.out.println("這條語句不會被執行");
System.out.println("這條語句會被執行, 且只執行1次");
// 相當於
while (false) {
System.out.println("這條語句不會被執行");
}
System.out.println("這條語句會被執行, 且只執行1次");
//------------------
// for示例
for (int i = 0; i < 1; i++) {
System.out.println("這條語句不會被執行");
System.out.println("這條語句不會被執行");
}
// 去掉大括號後
for (int i = 0; i < 1; i++)
System.out.println("這條語句不會被執行");
System.out.println("這條語句會被執行, 且只執行1次");
// 相當於
for (int i = 0; i < 1; i++) {
System.out.println("這條語句不會被執行");
}
System.out.println("這條語句會被執行, 且只執行1次");
- for循環哪些語句可以省略:
- 如果變量在for循環外已經聲明, 則初始化語句可以省略
- 判斷條件語句可以省略, 相當於不停止
- 控制條件語句可以省略, 相當於不改變for循環中的變量
// 外部聲明的變量, 作用域如果包含了for循環, 也是可以在for循環中直接使用的
int i = 0;
for (; i < 10; i++) {
// ...
}
// 將for循環修改爲死循環
for (;;) {
// 死循環
}
for (;;); // 連循環體都沒有的死循環
// while也可以死循環
while (true) {
// 死循環
}
while (true); // 沒有循環體的死循環
總結
- 流程控制語句
- 順序結構
- 選擇結構: 用於根據不同條件執行不同的代碼
- if語句
- 3種格式
- else…if, else語句可以省略
- switch語句
- case穿透
- switch表達式允許的數據類型:
- byte, short, char, int
- 都是可隱式轉換爲int的類型, 因爲byte, short, char可以隱式轉換爲int, 所以也可以使用
- JDK5起可以是枚舉類型
- JDK7起可以是String
- 小括號中可以是常量, 也可以是變量
- byte, short, char, int
- case後面的值:
- 用來和表達式的值進行匹配
- 值只能是常量
- 值的類型應該和switch小括號中值的類型一致
- break: 中斷
- default: 當所有case都不匹配時, 執行default
- if語句適用於有範圍的場景, 或者具體值的場景
- switch語句適用於具體值場景, 不適用於範圍的場景
- if語句
- 循環結構: 用於在滿足循環條件的情況下, 重複執行某些代碼
- for循環
- 適用於知道循環次數的場景
- while循環
- 適用於不知道循環次數的場景
- 至少執行0次循環體
- do…while循環
- 適用於不知道循環次數的場景
- 至少執行1次循環體
- 循環控制語句: 控制循環的跳過或結束
- break
- 適用場景: switch語句, 循環
- 作用: 結束switch語句或所在循環
- continue
- 適用場景: 循環
- 作用: 結束本次循環, 繼續下次循環
- break
- for循環
if語句格式
// 格式1
if (關係表達式) {
語句體; // 關係表達式爲true時執行
}
// 格式2
if (關係表達式) {
語句體1; // 關係表達式爲true時執行
} else {
語句體2; // 關係表達式爲false時執行
}
// 格式3
if (關係表達式1) {
語句體1; // 關係表達式1爲true時執行
} else if (關係表達式2) {
語句體2; // 關係表達式2爲true時執行
}
...
} else {
語句體n; // 以上關係表達式都爲false時執行
}
switch語句的格式
// 格式
switch (表達式) {
case 值1: // 當表達式的值爲值1時執行
語句體1;
break;
case 值2: // 當表達式的值爲值2時執行
語句體2;
break;
...
default: // 當表達式的值不能匹配上面的case時執行
語句體n;
break;
}
for循環格式
// 格式
for (初始化語句; 判斷條件語句; 控制條件語句) {
循環體語句;
}
// 示例
for (int i = 1; i <= 5; i++) {
// 獲取1~5的數值
}
while循環格式
// 普通格式
while (判斷條件語句) {
循環體語句;
}
// 擴展格式
初始化語句;
while (判斷條件語句) {
循環體語句;
控制條件語句;
}
// 示例
int i = 1;
while (i <= 5) {
syso(i); // 打印1~5
i++;
}
do…while格式
// 普通格式
do {
循環體語句;
} while (判斷條件語句);
// 擴展格式
初始化語句;
do {
循環體語句;
控制條件語句;
} while (判斷條件語句);
// 示例
int i = 1;
do {
syso(i);
i++;
} while (i <= 5);
往期知識:Java運算符那些事(最全知識點)