順序結構概述: 是程序中最簡單最基本的流程控制,沒有特定的語法結構,按照代碼的先后順序,依次執行,程序中大多數的代碼都是這樣執行的。
總的來說:寫在前面的先執行,寫在后面的后執行
選擇結構 也被稱為分支結構。
選擇結構有特定的語法規則,代碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,所以產生選擇,按照不同的選擇執行不同的代碼。
Java語言提供了兩種選擇結構語句 if語句 switch語句
2.1 if語句有三種格式(選擇結構)
① if語句第一種格式:
if(關系表達式) {
語句體
}
執行流程: 首先判斷關系表達式看其結果是true還是false
如果是true就執行語句體
如果是false就不執行語句體

注意:
關系表達式無論簡單還是復雜,結果必須是boolean類型
if語句控制的語句體如果是一條語句,大括號可以省略;如果是多條語句,就不能省略。建議永遠不要省略。
一般來說:有左大括號就沒有分號,有分號就沒有左大括號 例如:
int b = 100;
if(b != 100); //這里其實是有語句體的,只不過是空語句體。
//代碼塊
{
System.out.println("b的值是100");
System.out.println("over");
}
② if語句第二種格式:
if(關系表達式) {
語句體1;
}else {
語句體2;
}
執行流程: 首先判斷關系表達式看其結果是true還是false
如果是true就執行語句體1
如果是false就執行語句體2

注意:else后面是沒有比較表達式的,只有if后面有。
三元運算符實現的,都可以采用if語句實現。反之不成立。
什么時候if語句實現不能用三元改進呢?
當if語句控制的操作是一個輸出語句的時候就不能。
為什么呢?因為三元運算符是一個運算符,運算符操作完畢就應該有一個結果,而不是一個輸出。
class IfDemo4 {
public static void main(String[] args) {
//獲取兩個數據的最大值
int a = 10;
int b = 20;
//用if語句實現
int max1;
if(a > b) {
max1 = a;
}else {
max1 = b;
}
System.out.println("max1:"+max1);
//用三元改進
int max2 = (a > b)? a: b;
System.out.println("max2:"+max2);
System.out.println("----------");
//判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數
int x = 100;
if(x%2 == 0) {
System.out.println("100是一個偶數");
}else {
System.out.println("100是一個奇數");
}
//用三元改進;這種改進是錯誤的。
//String s = (x%2 == 0)?System.out.println("100是一個偶數");:System.out.println("100是一個奇數");;
}
}
③ if語句第三種格式:
if(關系表達式1) {
語句體1;
}else if (關系表達式2) {
語句體2;
} …
else {
語句體n+1;
}
執行流程: 首先判斷關系表達式1看其結果是true還是false
如果是true就執行語句體1
如果是false就繼續判斷關系表達式2看其結果是true還是false
如果是true就執行語句體2
如果是false就繼續判斷關系表達式…看其結果是true還是false
…
如果沒有任何關系表達式為true,就執行語句體n+1。

④ 嵌套 if 語句
只有當外層 if 的條件成立時,才會判斷內層 if 的條件。

執行過程:

示例代碼:

2.2 switch語句(選擇結構)
switch語句格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
…
default:
語句體n+1;
break;
}
格式解釋:
switch表示這是switch語句
表達式的取值:byte,short,int,char
JDK5以后可以是枚舉
JDK7以后可以是String
case后面跟的是要和表達式進行比較的值
語句體部分可以是一條或多條語句
break表示中斷,結束的意思,可以結束switch語句
default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。
執行流程:
首先計算出表達式的值
其次,和case依次比較,一旦有對應的值,就會執行
相應的語句,在執行的過程中,遇到break就會結束。
最后,如果所有的case都和表達式的值不匹配,就會執行default語句體部分,然后程序結束掉。
示例代碼:

循環語句的組成
初始化語句:
一條或者多條語句,這些語句完成一些初始化操作。
判斷條件語句:
這是一個boolean 表達式,這個表達式能決定是否執行循環體。
循環體語句:
這個部分是循環體語句,也就是我們要多次做的事情。
控制條件語句:
這個部分在一次循環體結束后,下一次循環判斷條件執行前執行。通過用於控制循環條件中的變量,使得循環在合適的時候結束。
3.1 Java循環語句 for
for循環語句格式:
for(初始化語句;判斷條件語句;控制條件語句) {
循環體語句;
}
執行流程:
A:執行初始化語句
B:執行判斷條件語句,看其結果是true還是false
如果是false,循環結束。
如果是true,繼續執行。
C:執行循環體語句
D:執行控制條件語句
E:回到B繼續

注意事項:
A:判斷條件語句無論簡單還是復雜結果是boolean類型。
B:循環體語句如果是一條語句,大括號可以省略;如果是多條語句,大括號不能省略。建議永遠不要省略。
C:一般來說:有左大括號就沒有分號,有分號就沒有左大括號
需要留心的幾個小細節:
3.2 Java循環語句 while
while循環語句格式:
基本格式
while(判斷條件語句) {
循環體語句;
}
擴展格式
初始化語句;
while(判斷條件語句) {
循環體語句;
控制條件語句;
}
無限循環:
while(true){ }
執行流程:

補充:for循環語句和while循環語句可以等價轉換,但還是有些小區別的
使用區別:
控制條件語句所控制的那個變量,在for循環結束后,就不能再被訪問到了,而while循環結束還可以繼續使用,如果你想繼續使用,就用while,否則推薦使用for。
原因是for循環結束,該變量就從內存中消失,能夠提高內存的使用效率。
場景區別:
for循環適合針對一個范圍判斷進行操作
while循環適合判斷次數不明確操作
基本格式
do {
循環體語句;
}while((判斷條件語句);
擴展格式
初始化語句;
do {
循環體語句;
控制條件語句;
} while((判斷條件語句);
執行流程:
1,先執行一遍循環體語句和控制條件語句,然后執行 判斷條件語句 判斷循環條件是否成立
2,如果條件成立,繼續執行1、2步驟,直到循環條件不成立為止。
特點: 先執行,后判斷

三種循環的區別:
1> do...while循環至少執行一次循環體;而 for , while循環必須先判斷條件是否成立,然后決定是否執行循環體語句。
2> 優先考慮for,其次考慮while,最后考慮do...while
3> do...while循環以 ; 做結束,其它的循環以 { } 做結束。
while(true){...}
for(; ;){...}
循環嵌套:循環語句的循環體本身 是一個循環語句。
Java循環跳轉語句 break
Java循環跳轉語句 continue
continue 的作用是跳過循環體中剩余的語句執行下一次循環。
例如,打印 1--10 之間所有的偶數,示例代碼:

運行結果:2.4.6.8.10
擴展:
return和break以及continue的區別
return是結束方法
break是跳出循環
continue是終止本次循環繼續下次循環
