【Java】java控制語句的那些事(最全知識點)

【Java】java控制的那些事(最全知識點)

學習一門語言,最基礎的不過控制語句,語言之間互通性最高的也是控制語句,如果你連控制語句都沒搞懂,都不熟悉,那麼你的編程之路註定不順利,所以奔本篇詳細介紹了控制語句的各類知識點

流程控制語句

流程控制語句分類:

  1. 順序結構
  2. 選擇結構
  3. 循環結構

順序結構

  • 順序結構是最基本的流程
  • 順序結構的特點: 從上往下依次進行

選擇結構

if語句

if語句第一種格式的基本使用

  • 選擇結構:

    • 也被稱爲分支結構
  • 選擇結構有2種:

    1. if語句
    2. switch語句
  • if語句的第一種格式: 只使用if

// 格式
if(關係表達式) {
	語句體
}

// 示例
int a = 0;
if(a == 1) {
	System.out.println("a等於1");
}
  • 第一種格式的執行流程:
    • 首先判斷關係表達式的結果是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中的語句體
  • 能不能省略最後的else? 可以

switch語句的格式和執行流程

  • switch語句的格式
switch(表達式) {
	case1:
		語句體1;
		break;
	case2:
		語句體2;
		break;
	...
	case 值n:
		語句體n;
		break;
	default:
		語句體n+1;
		break;
}
  • 說明
    • switch表達式允許的數據類型:
      • byte, short, char, int
        • 都是可隱式轉換爲int的類型, 因爲byte, short, char可以隱式轉換爲int, 所以也可以使用
      • JDK5起可以是枚舉類型
      • JDK7起可以是String
      • 小括號中可以是常量, 也可以是變量
    • case後面的值:
      • 用來和表達式的值進行匹配
      • 值只能是常量
      • 值的類型應該和switch小括號中值的類型一致
    • break: 中斷
    • default: 當所有case都不匹配時, 執行default
  • 執行流程
    • 首先計算表達式的值
    • 然後執行符合的case
    • 如果沒有符合的case, 則執行default

循環控制語句

  • 循環語句: 在滿足循環條件的情況下, 反覆執行某段代碼.
    • 循環體: 這段被重複執行的代碼
  • 循環的停止:
    • 在合適的時候將循環判斷條件修改爲false, 從而結束循環. 否則循環將一直執行下去, 形成死循環
  • 循環語句的組成
    • 初始化語句: 一條語句(一條語句可以初始化多個變量), 這些語句完成一些初始化操作
    • 判斷條件語句: boolean表達式, 這個表達式能決定是否執行循環體
    • 循環體語句: 要重複做的事情
    • 控制條件語句: 控制循環結束
  • 3種循環結構語句
    1. for循環
    2. while循環
    3. do…while循環

for循環

  • 格式
// 格式
for(初始化語句; 判斷條件語句; 控制條件語句) {
	循環體語句;
}
// for循環適用於知道循環多少次的情況
// 示例
for (int i = 1; i <= 5; i++) {
	System.out.println("我錯了");
	syso(i); 
}
  • 執行流程
    1. 先執行初始化語句
    2. 然後執行判斷條件語句
      • 如果爲true, 則執行循環體語句
        • 循環體語句執行完畢後, 執行控制條件語句
        • 從步驟2重複
      • 如果爲false, 則for循環結束
  • 初始化語句只能有一句嗎?
    • 只能有一句
    • 但注意, 一句可以初始化多個變量: 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, 則循環結束
  • 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(判斷條件語句);
  • 執行流程:
    1. 執行初始化語句
    2. 執行循環體語句
    3. 執行控制條件語句
    4. 執行判斷條件語句, 看是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的作用:
    1. 在switch語句中, 用於結束case
    2. 在循環中, 用於結束所在的循環

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
          • 小括號中可以是常量, 也可以是變量
        • case後面的值:
          • 用來和表達式的值進行匹配
          • 值只能是常量
          • 值的類型應該和switch小括號中值的類型一致
        • break: 中斷
        • default: 當所有case都不匹配時, 執行default
      • if語句適用於有範圍的場景, 或者具體值的場景
      • switch語句適用於具體值場景, 不適用於範圍的場景
    • 循環結構: 用於在滿足循環條件的情況下, 重複執行某些代碼
      • for循環
        • 適用於知道循環次數的場景
      • while循環
        • 適用於不知道循環次數的場景
        • 至少執行0次循環體
      • do…while循環
        • 適用於不知道循環次數的場景
        • 至少執行1次循環體
      • 循環控制語句: 控制循環的跳過或結束
        • break
          • 適用場景: switch語句, 循環
          • 作用: 結束switch語句或所在循環
        • continue
          • 適用場景: 循環
          • 作用: 結束本次循環, 繼續下次循環

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 (表達式) {
	case1:    // 當表達式的值爲值1時執行
		語句體1;
		break;
	case2:    // 當表達式的值爲值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運算符那些事(最全知識點)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章