Java程序控制邏輯—流程控制
1 前言
任何一門(mén)語(yǔ)言都需要基本的流程控制語(yǔ)句,其思想也符合人類(lèi)判斷問(wèn)題或做事的邏輯過(guò)程。什么是流程控制呢?流程就是做一件事情的順序,或者說(shuō)是次序。在程序設(shè)計(jì)中,流程就是要完成一個(gè)功能,而流程控制則是指如何在程序設(shè)計(jì)中控制完成某種功能的次序。本章將介紹Java語(yǔ)言中關(guān)于“流程控制”的使用方法。
2 條件語(yǔ)句
流程控制中最基本的就是條件執(zhí)行,也就是說(shuō),一些操作只能在某些條件滿(mǎn)足的情況下才執(zhí)行,在一些條件下執(zhí)行某種操作,在另外一些條件下執(zhí)行另外的操作。Java分支語(yǔ)句主要分為下述兩種。
2.1 if
條件語(yǔ)句是一個(gè)重要的編程語(yǔ)句,用于告訴程序在某個(gè)條件成立的情況下執(zhí)行某段語(yǔ)句,而在另一種情況下執(zhí)行另外的語(yǔ)句。
使用if條件語(yǔ)句,可選擇是否要執(zhí)行緊跟在條件之后的那個(gè)語(yǔ)句。關(guān)鍵字if之后是作為條件的“布爾表達(dá)式”。如果該表達(dá)式返回的結(jié)果為true,則執(zhí)行其后的語(yǔ)句;如果為false,則不執(zhí)行if條件之后的語(yǔ)句。if條件語(yǔ)句可分為簡(jiǎn)單的if條件語(yǔ)句、if…else語(yǔ)句和if…else if多分支語(yǔ)句。
語(yǔ)法1:
if(條件判斷表達(dá)式){
語(yǔ)句1
}
說(shuō)明:在if后面的條件語(yǔ)句中,必須是一個(gè)可以轉(zhuǎn)換成boolean型的表達(dá)式,這個(gè)表達(dá)式需要用括號(hào)括起來(lái)。當(dāng)表達(dá)式的值為true時(shí)執(zhí)行語(yǔ)句1。
語(yǔ)法2:
if(條件判斷表達(dá)式){
語(yǔ)句1
}
else{
語(yǔ)句2
}
說(shuō)明:表達(dá)式為true時(shí)執(zhí)行語(yǔ)句1,表達(dá)式為false時(shí)執(zhí)行語(yǔ)句2
語(yǔ)法3:
if(條件判斷表達(dá)式1){
?? ?語(yǔ)句1
}
else if(條件判斷表達(dá)式2){
?? ?語(yǔ)句2
}
else if(條件判斷表達(dá)式3){
?? ?語(yǔ)句3
}
...
else if(條件判斷表達(dá)式n)
{
?? ?語(yǔ)句N(xiāo)
}
else{
?? ?語(yǔ)句N(xiāo)
}說(shuō)明:表達(dá)式1為true時(shí)執(zhí)行語(yǔ)句1,表達(dá)式1為false時(shí)判斷表達(dá)式2,表達(dá)式2為true時(shí)執(zhí)行語(yǔ)句2,表達(dá)式2為false時(shí)判斷表達(dá)式3,如此直至表達(dá)式n為false,則執(zhí)行最后一個(gè)else后的語(yǔ)句n。
2.2 switch
在進(jìn)行多重選擇的時(shí)候,過(guò)多if-else-if條件選擇語(yǔ)句的嵌套會(huì)造成程序維護(hù)上的困擾。在Java語(yǔ)言中提供了switch條件選擇語(yǔ)句,使用它可以讓程序更加簡(jiǎn)潔清楚。與if條件選擇語(yǔ)句不同的是,switch只有一個(gè)條件判斷表達(dá)式。switch是一種多選一的條件選擇語(yǔ)句,它是按照條件判斷表達(dá)式的運(yùn)算結(jié)果來(lái)決定在多個(gè)程序分支中選擇其中之一的程序分支,并執(zhí)行這個(gè)程序分支內(nèi)的程序代碼。
switch條件選擇語(yǔ)句的語(yǔ)法如下:
switch (表達(dá)式) {
? ? case 數(shù)值1:語(yǔ)句1;break;
? ? case 數(shù)值2:語(yǔ)句2;break;
? ? case 數(shù)值3:語(yǔ)句3;break; ? ?
? ? ...
? ? default:語(yǔ)句0;
}說(shuō)明:switch的表達(dá)式類(lèi)型為整型(包括byte、short、char、int等)、字符類(lèi)型及枚舉類(lèi)。switch語(yǔ)句將從與選項(xiàng)值相匹配的case標(biāo)簽處開(kāi)始執(zhí)行直到遇到break語(yǔ)句,或者執(zhí)行到switch語(yǔ)句的結(jié)束處為止。如果沒(méi)有相匹配的case標(biāo)簽,而有default子句,就執(zhí)行這個(gè)子句。
3 循環(huán)語(yǔ)句
所謂循環(huán),就是多次重復(fù)執(zhí)行某些類(lèi)似的操作,這個(gè)操作一般不是完全一樣的操作,而是類(lèi)似的操作。循環(huán)語(yǔ)句是程序開(kāi)發(fā)非常重要,也是使用頻率很高的一個(gè)技能點(diǎn)。在Java中,循環(huán)有4種形式,分別是while、do/while、for和foreach。
3.1 while
while 循環(huán)的形式是:
while(布爾表達(dá)式) {
?? ?語(yǔ)句塊; //可以是單條語(yǔ)句, 也可以是復(fù)合語(yǔ)句
}執(zhí)行語(yǔ)句會(huì)在每一次循環(huán)前,判斷布爾表達(dá)式返回值是否為 true。
3.2 do-while
do-while循環(huán)語(yǔ)句的一般格式如下:
do{
語(yǔ)句塊;
} while(布爾表達(dá)式);do…while語(yǔ)句與while語(yǔ)句不同的是,它先執(zhí)行大括號(hào)內(nèi)的循環(huán)體,再判斷條件,如果條件不滿(mǎn)足,下次不再執(zhí)行循環(huán)體。也就是說(shuō),在判斷條件之前,就已經(jīng)執(zhí)行大括號(hào)內(nèi)的循環(huán)體。
3.3 for
for 循環(huán)可能是最常用的迭代形式。 該循環(huán)在第一次迭代之前執(zhí)行初始化。隨后,它會(huì)執(zhí)行布爾表達(dá)式,并在每次迭代結(jié)束時(shí),進(jìn)行某種形式的步進(jìn)。for 循環(huán)的形式是:
for(初始化表達(dá)式;循環(huán)條件;迭代語(yǔ)句) {
? ?循環(huán)體;
}初始化語(yǔ)句是循環(huán)的初始狀態(tài),循環(huán)條件是條件判斷的布爾表達(dá)式,如果表達(dá)式的值為true,則執(zhí)行后面的語(yǔ)句,接下來(lái)執(zhí)行后面的迭代語(yǔ)句。如果條件判斷表達(dá)式第一次求值就為false,那么for循環(huán)不會(huì)進(jìn)行任何的迭代,后面的循環(huán)體和迭代語(yǔ)句也不會(huì)執(zhí)行任何操作。
一次循環(huán)結(jié)束后,下一次循環(huán)開(kāi)始前,執(zhí)行迭代部分的語(yǔ)句,然后判斷循環(huán)條件表達(dá)式的值,決定是否進(jìn)行下一次循環(huán)。
3.4 for-in
Java 5 引入了更為簡(jiǎn)潔的“增強(qiáng)版 for 循環(huán)”語(yǔ)法來(lái)操縱數(shù)組和集合。for-in 語(yǔ)法可以節(jié)省我們編寫(xiě)代碼的時(shí)間。 更重要的是,它提高了代碼可讀性以及更好地描述代碼意圖而不是詳細(xì)說(shuō)明這操作細(xì)節(jié)。
for-in的語(yǔ)句格式如下:
for(元素類(lèi)型 元素變量 : 遍歷對(duì)象){ ?
?? ?循環(huán)體;
}大部分文檔也稱(chēng)其為for-each 語(yǔ)法,但因?yàn)榱瞬慌c Java 8 新添的 forEach() 產(chǎn)生混淆,因此我稱(chēng)之為 for-in 循環(huán)。
4 循環(huán)控制
在任何迭代語(yǔ)句的主體內(nèi),都可以使用 break 和 continue 來(lái)控制循環(huán)的流程。 其中,break 表示跳出當(dāng)前循環(huán)體。而 continue 表示停止本次循環(huán),開(kāi)始下一次循環(huán)。
4.1 break
break語(yǔ)句通常用在循環(huán)語(yǔ)句和開(kāi)關(guān)語(yǔ)句中,例如用在開(kāi)關(guān)語(yǔ)句switch中,break語(yǔ)句可以使程序跳出switch而執(zhí)行switch以后的語(yǔ)句,以防止程序進(jìn)入死循環(huán)而無(wú)法退出。當(dāng)break語(yǔ)句用于do…while、for、while循環(huán)語(yǔ)句中時(shí),可使程序終止循環(huán)。
4.2 continue
continue語(yǔ)句用來(lái)略過(guò)循環(huán)中剩下的語(yǔ)句,停止當(dāng)前迭代,重新開(kāi)始新的循環(huán),這和break語(yǔ)句的完全跳出循環(huán)是不一樣的。continue僅僅出現(xiàn)在while、do…while、for語(yǔ)句的子語(yǔ)句塊中。也可以使用標(biāo)簽來(lái)選擇需要終止的嵌套循環(huán)的層級(jí)。
5 碼農(nóng)洞見(jiàn)
5.1 GOTO語(yǔ)句有害論
程序之所以能夠按照人們的意愿執(zhí)行,主要依靠的是程序的控制結(jié)構(gòu)。早期的程序員廣泛使用GOTO語(yǔ)句,它破壞了程序設(shè)計(jì)結(jié)構(gòu)性,導(dǎo)致程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。1968年Dijkstra等人發(fā)表了著名的論文《GOTO語(yǔ)句有害論》,即“所有有意義的程序流程都可以使用三種基本的結(jié)構(gòu)來(lái)構(gòu)成”。自此人們的編程方式發(fā)生重大變化正是這個(gè)原因,在Java程序設(shè)計(jì)中,雖然goto作為關(guān)鍵字保留了下來(lái),但是一直沒(méi)有啟用。
5.2 結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)(Structured programming)是一種經(jīng)典的編程模式,它強(qiáng)調(diào)用模塊化、積木式的方法來(lái)建立程序。采用結(jié)構(gòu)化程序設(shè)計(jì)方法,可使程序的邏輯結(jié)構(gòu)清晰、層次分明、可讀性好、可靠性強(qiáng),從而提高了程序的開(kāi)發(fā)效率,保證了程序質(zhì)量,改善了程序的可靠性。
一般來(lái)說(shuō)程序的結(jié)構(gòu)包含以下3種。
(1)順序結(jié)構(gòu)。
(2)選擇結(jié)構(gòu)。
(3)循環(huán)結(jié)構(gòu)。
這3種不同的結(jié)構(gòu)有一個(gè)共同點(diǎn),就是它們都只有一個(gè)入口,也只有一個(gè)運(yùn)行出口。這些單一的入口、出口可讓程序可控、易讀、好維護(hù)。
到此這篇關(guān)于Java程序控制邏輯—流程控制的文章就介紹到這了,更多相關(guān)Java流程控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談異常結(jié)構(gòu)圖、編譯期異常和運(yùn)行期異常的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談異常結(jié)構(gòu)圖、編譯期異常和運(yùn)行期異常的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
Spring WebSocket 404錯(cuò)誤的解決方法
這篇文章主要為大家詳細(xì)介紹了Spring WebSocket 404錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
JAVA發(fā)送HTTP請(qǐng)求的四種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于JAVA發(fā)送HTTP請(qǐng)求的多種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
關(guān)于maven配置項(xiàng)目一直提示程序包不存在以及scope的坑
這篇文章主要介紹了關(guān)于maven配置項(xiàng)目一直提示程序包不存在以及scope的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Java的可變參數(shù)與Collections類(lèi)的功能示例解析
這篇文章主要為大家介紹了Java的可變參數(shù)與Collections類(lèi)的功能示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證示例說(shuō)明
這篇文章主要為大家介紹了RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證的示例說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Python__雙劃線(xiàn)參數(shù)代碼實(shí)例解析
這篇文章主要介紹了python__雙劃線(xiàn)參數(shù)代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
@TransactionalEventListener的使用和實(shí)現(xiàn)原理分析
這篇文章主要介紹了@TransactionalEventListener的使用和實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

