流程控制
兩種基本的流程控制結(jié)構(gòu):分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。其中分支結(jié)構(gòu)用于實(shí)現(xiàn)根據(jù)條件來(lái)選擇性地執(zhí)行某段代碼,循環(huán)結(jié)構(gòu)則用于實(shí)現(xiàn)根據(jù)循環(huán)條件重復(fù)執(zhí)行某段代碼。
這里是我的個(gè)人博客
分支結(jié)構(gòu)
if語(yǔ)句第一種格式:
if(關(guān)系表達(dá)式) {
//語(yǔ)句體
}
執(zhí)行流程
1.首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
2.如果是true就執(zhí)行語(yǔ)句體
3.如果是false就不執(zhí)行語(yǔ)句體

代碼舉例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a == b) {
System.out.println("a == b");
}
}
if語(yǔ)句第二種格式
if(關(guān)系表達(dá)式) {
//語(yǔ)句體1
} else {
//語(yǔ)句體2
}
執(zhí)行流程
- 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語(yǔ)句體1
- 如果是false就執(zhí)行語(yǔ)句體2
代碼舉例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a == b) {
System.out.println("a == b");
} else {
System.out.println("a != b");
}
}
if語(yǔ)句第三種格式
if(關(guān)系表達(dá)式) {
//語(yǔ)句體1
} else if(關(guān)系表達(dá)式2) {
//語(yǔ)句體2
}
...
} else if(關(guān)系表達(dá)式n) {
//語(yǔ)句體n
}else {
//語(yǔ)句體n + 1
}
執(zhí)行流程
首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false
如果是true就執(zhí)行語(yǔ)句體1
如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false
如果是true就執(zhí)行語(yǔ)句體2
如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false
…
如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語(yǔ)句體n+1。
代碼舉例
public static void main(String[] args) {
int a = 3;
int b = 4;
if(a > b) {
System.out.println("a > b");
} else if(a < b){
System.out.println("a > b");
} else {
System.out.println("a = b");
}
}
if語(yǔ)句和三元運(yùn)算符的互換
public static void main(String[] args) {
//兩個(gè)數(shù)的最大值
int a = 3;
int b = 4;
int max;
if(a > b) {
max = a;
} else {
max = b;
}
int max1 = (a > b) ? a : b;
}
分支結(jié)構(gòu):switch
switch(表達(dá)式) {
case 數(shù)值1:
//語(yǔ)句體1
break;
case 數(shù)值2:
//語(yǔ)句體2
break;
case 數(shù)值3:
//語(yǔ)句體3
break;
...
default :
//語(yǔ)句體;
break;
}
//break:表示中斷,結(jié)束的意思。
//default:表示所有的情況都不匹配的時(shí)候,就執(zhí)行語(yǔ)句體n+1。和if語(yǔ)句的else相似。
執(zhí)行流程:
首先計(jì)算出表達(dá)式的值
其次,和case依次比較,一旦有對(duì)應(yīng)的值,就會(huì)執(zhí)行相應(yīng)的語(yǔ)句,在執(zhí)行的過(guò)程中,遇到break就 會(huì)結(jié)束。
最后,如果所有的case都和表達(dá)式的值不匹配,就會(huì)執(zhí)行default語(yǔ)句體部分,然后程序結(jié)束掉。
注意事項(xiàng):
switch(表達(dá)式)的數(shù)值類型是有限的,只能是四種基本數(shù)據(jù)類型和兩種引用數(shù)據(jù)類型。
四種基本數(shù)據(jù)類型:byte,short, int, char。
兩種引用數(shù)據(jù)類型:jdk5.0后支持枚舉,jdk7.0后支持字符串String。
default的位置和case的位置可以互換,不影響。
代碼舉例
public static void main(String[] args) {
int a = 3;
switch(a) {
case 1:
System.out.println("a = 1");
break;
case 2:
System.out.println("a = 2");
break;
case 3:
System.out.println("a = 3");
break;
default :
System.out.println("a 不等于 1,2,3");
break;
}
}
//輸出 a = 3
case穿透性
在switch語(yǔ)句中,如果case的后面不寫break,將出現(xiàn)穿透現(xiàn)象,也就是一旦匹配成功,不會(huì)在判斷下一個(gè)case的值,直接向后運(yùn)行,直到遇到break或者整個(gè)switch語(yǔ)句結(jié)束,switch語(yǔ)句執(zhí)行終止。
public static void main(String[] args) {
int a = 3;
switch(a) {
case 1:
System.out.println("a = 1");
break;
case 2:
System.out.println("a = 2");
break;
case 3:
System.out.println("a = 3");
case 4:
System.out.println("a = 4");
default :
System.out.println("a 不等于 1,2,3,4");
break;
}
}
//此時(shí)會(huì)輸入
//a = 3
//a = 4
//a 不等于 1,2,3,4
循環(huán)結(jié)構(gòu)
? 循環(huán)語(yǔ)句可以在滿足循環(huán)條件的情況下,反復(fù)執(zhí)行某一段代碼,這段被重復(fù)執(zhí)行的代碼被稱為循環(huán)體語(yǔ)句,當(dāng)反復(fù)執(zhí)行這個(gè)循環(huán)體時(shí),需要在合適的時(shí)候把循環(huán)判斷條件修改為false,從而結(jié)束循環(huán),否則循 環(huán)將一直執(zhí)行下去,形成死循環(huán)。
for循環(huán):
格式:
for(初始化語(yǔ)句①; 循環(huán)條件語(yǔ)句②; 迭代語(yǔ)句③) {
//循環(huán)體
}
執(zhí)行流程:
? 第一步:執(zhí)行初始化語(yǔ)句①,完成循環(huán)變量的初始化;
? 第二步:執(zhí)行循環(huán)條件語(yǔ)句②,看循環(huán)條件語(yǔ)句的值是true,還是false;
? 如果是true,執(zhí)行第三步;
? 如果是false,循環(huán)語(yǔ)句中止,循環(huán)不再執(zhí)行。
? 第三步:執(zhí)行循環(huán)體語(yǔ)句③
? 第四步:執(zhí)行迭代語(yǔ)句④,針對(duì)循環(huán)變量重新賦值
? 第五步:根據(jù)循環(huán)變量的新值,重新從第二步開始再執(zhí)行一遍
代碼舉例:
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("1");
}
}
while循環(huán):
while語(yǔ)句標(biāo)準(zhǔn)格式:
while(條件語(yǔ)句①) {
//循環(huán)語(yǔ)句體②
}
執(zhí)行流程:
第一步:執(zhí)行循環(huán)條件語(yǔ)句①,看循環(huán)條件語(yǔ)句的值是true,還是false;
? 如果是true,執(zhí)行第二步;
? 如果是false,循環(huán)語(yǔ)句中止,循環(huán)不再執(zhí)行。
第二步:執(zhí)行循環(huán)體語(yǔ)句②;
第三步:循環(huán)體語(yǔ)句執(zhí)行完后,重新從第一步開始再執(zhí)行一遍
while擴(kuò)展格式:
初始化語(yǔ)句①;
while(條件語(yǔ)句②) {
循環(huán)語(yǔ)句體
迭代語(yǔ)句③
}
do... while()
do...while()語(yǔ)句標(biāo)準(zhǔn)格式
do {
循環(huán)體語(yǔ)句①;
} while (循環(huán)條件語(yǔ)句②);
執(zhí)行流程:
第一步:執(zhí)行循環(huán)體語(yǔ)句①;
第二步:執(zhí)行循環(huán)條件語(yǔ)句②,看循環(huán)條件語(yǔ)句的值是true,還是false;
? 如果是true,執(zhí)行第三步;
? 如果是false,循環(huán)語(yǔ)句終止,循環(huán)不再執(zhí)行。
第三步:循環(huán)條件語(yǔ)句執(zhí)行完后,重新從第一步開始再執(zhí)行一遍
do...while()語(yǔ)句擴(kuò)展格式
初始化語(yǔ)句①
do {
循環(huán)體語(yǔ)句②;
迭代語(yǔ)句③;
} while (循環(huán)條件語(yǔ)句④);
循環(huán)語(yǔ)句的區(qū)別
擴(kuò)展格式的區(qū)別(了解)
? 從循環(huán)次數(shù)角度分析
? do...while循環(huán)至少執(zhí)行一次循環(huán)體語(yǔ)句
? for和while循環(huán)先循環(huán)條件語(yǔ)句是否成立,然后決定是否執(zhí)行循環(huán)體,至少執(zhí)行零次循環(huán)體
語(yǔ)句
從循環(huán)變量的生命周期角度分析
? for循環(huán)的循環(huán)變量,在循環(huán)語(yǔ)句結(jié)束后,不可以被訪問(wèn);
? while和do...while循環(huán)的循環(huán)變量,是可以被繼續(xù)使用的;
標(biāo)準(zhǔn)格式的區(qū)別(理解):
遍歷有明顯的循環(huán)次數(shù)(范圍)的需求,選擇for循環(huán)
遍歷沒有明顯的循環(huán)次數(shù)(范圍)的需求,循環(huán)while循環(huán)
控制語(yǔ)句
break
使用場(chǎng)景:終止switch或者循環(huán)
? 在選擇結(jié)構(gòu)switch語(yǔ)句中
? 在循環(huán)語(yǔ)句中
? 離開使用場(chǎng)景的存在是沒有意義的
? break后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到。
continue
使用場(chǎng)景:結(jié)束本次循環(huán),繼續(xù)下一次的循環(huán)
continue后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到
return
使用場(chǎng)景:應(yīng)用在方法中,結(jié)束方法的
return后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到。