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