一文詳解Java中流程控制語句
概述
在一個(gè)程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。也就是說,程序的流程對運(yùn)行結(jié)果有直接的影響。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時(shí)候我們要通過控制語句的執(zhí)行順序來實(shí)現(xiàn)我們要完成的功能。
判斷語句
if
格式:
if (關(guān)系表達(dá)式){ 語句體; }
執(zhí)行流程:
- 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體
- 如果是false就不執(zhí)行語句體
if...else
格式:
if(關(guān)系表達(dá)式) { 語句體1; }else { 語句體2; }
執(zhí)行流程:
- 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就執(zhí)行語句體2
public static void main(String[] args){ // 判斷給定的數(shù)據(jù)是奇數(shù)還是偶數(shù) // 定義變量 int a = 1; if(a % 2 == 0) { System.out.println("a是偶數(shù)"); } else{ System.out.println("a是奇數(shù)"); } System.out.println("結(jié)束"); }
if..else if...else
格式:
if (判斷條件1) { 執(zhí)行語句1; } else if (判斷條件2) { 執(zhí)行語句2; } ... }else if (判斷條件n) { 執(zhí)行語句n; } else { 執(zhí)行語句n+1; }
執(zhí)行流程:
- 首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體2
- 如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false
- …
- 如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語句體n+1。
案例:
public static void main(String[] args) { // x和y的關(guān)系滿足如下: // x>=3 y = 2x + 1; //‐1<=x<3 y = 2x; // x<=‐1 y = 2x – 1; // 根據(jù)給定的x的值,計(jì)算出y的值并輸出。 // 定義變量 int x = 5; int y; if (x>= 3) { y = 2 * x + 1; } else if (x >= ‐1 && x < 3) { y = 2 * x; } else { y = 2 * x ‐ 1; } System.out.println("y的值是:"+y); }
if語句和三元運(yùn)算符的互換
在某些簡單的應(yīng)用中,if語句是可以和三元運(yùn)算符互換使用的。
public static void main(String[] args) { int a = 10; int b = 20; //定義變量,保存a和b的較大值 int c; if(a > b) { c = a; } else { c = b; } //可以上述功能改寫為三元運(yùn)算符形式 c = a > b ? a:b; }
選擇語句
switch
格式:
switch(表達(dá)式) { case 常量值1: 語句體1; break; case 常量值2: 語句體2; break; ... default: 語句體n+1; break; }
執(zhí)行流程:
- 首先計(jì)算出表達(dá)式的值
- 其次,和case依次比較,一旦有對應(yīng)的值,就會執(zhí)行相應(yīng)的語句,在執(zhí)行的過程中,遇到break就會結(jié)束。
- 最后,如果所有的case都和表達(dá)式的值不匹配,就會執(zhí)行default語句體部分,然后程序結(jié)束掉。
public static void main(String[] args) { //定義變量,判斷是星期幾 int weekday = 6; //switch語句實(shí)現(xiàn)選擇 switch(weekday) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("你輸入的數(shù)字有誤"); break; } }
switch語句中,表達(dá)式的數(shù)據(jù)類型,可以是byte,short,int,char,enum(枚舉),JDK7后可以接收字符串。
case的穿透性
在switch語句中,如果case的后面不寫break,將出現(xiàn)穿透現(xiàn)象,也就是不會在判斷下一個(gè)case的值,直接向后運(yùn) 行,直到遇到break,或者整體switch結(jié)束。
public static void main(String[] args) { int i = 5; switch (i){ case 0: System.out.println("執(zhí)行case0"); break; case 5: System.out.println("執(zhí)行case5"); case 10: System.out.println("執(zhí)行case10"); default: System.out.println("執(zhí)行default"); } }
上述程序中,執(zhí)行case5后,由于沒有break語句,程序會一直向后走,不會在判斷case,也不會理會break,直接運(yùn)行完整體switch。 由于case存在穿透性,因此初學(xué)者在編寫switch語句時(shí),必須要寫上break。
循環(huán)語句
循環(huán)語句可以在滿足循環(huán)條件的情況下,反復(fù)執(zhí)行某一段代碼,這段被重復(fù)執(zhí)行的代碼被稱為循環(huán)體語句,當(dāng)反復(fù)執(zhí)行這個(gè)循環(huán)體時(shí),需要在合適的時(shí)候把循環(huán)判斷條件修改為false,從而結(jié)束循環(huán),否則循環(huán)將一直執(zhí)行下去,形成死循環(huán)。
for
格式:
for(初始化表達(dá)式①; 布爾表達(dá)式②; 步進(jìn)表達(dá)式④){ 循環(huán)體③ }
執(zhí)行流程: 執(zhí)行順序:①②③④>②③④>②③④…②不滿足為止。 ①負(fù)責(zé)完成循環(huán)變量初始化 ②負(fù)責(zé)判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán) ③具體執(zhí)行的語句 ④循環(huán)后,循環(huán)條件所涉及變量的變化情況
while
格式:
初始化表達(dá)式① while(布爾表達(dá)式②){ 循環(huán)體③ 步進(jìn)表達(dá)式④ }
執(zhí)行流程: 執(zhí)行順序:①②③④>②③④>②③④…②不滿足為止。 ①負(fù)責(zé)完成循環(huán)變量初始化。 ②負(fù)責(zé)判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)。 ③具體執(zhí)行的語句。 ④循環(huán)后,循環(huán)變量的變化情況。 while循環(huán)輸出10次HelloWorld:
public static void main(String[] args) { //while循環(huán)實(shí)現(xiàn)打印10次HelloWorld //定義初始化變量 int i = 1; //循環(huán)條件<=10 while(i<=10){ System.out.println("HelloWorld"); //步進(jìn) i++; } }
do...while
格式:
初始化表達(dá)式① do{ 循環(huán)體③ 步進(jìn)表達(dá)式④ }while(布爾表達(dá)式②);
執(zhí)行流程: 執(zhí)行順序:①③④>②③④>②③④…②不滿足為止。 ①負(fù)責(zé)完成循環(huán)變量初始化。 ②負(fù)責(zé)判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)。 ③具體執(zhí)行的語句 ④循環(huán)后,循環(huán)變量的變化情況 輸出10次HelloWorld:
public static void main(String[] args) { int x=1; do { System.out.println("HelloWorld"); x++; }while(x<=10); }
do...while循環(huán)的特點(diǎn):無條件執(zhí)行一次循環(huán)體,即使我們將循環(huán)條件直接寫成false,也依然會循環(huán)一次。這樣的 循環(huán)具有一定的風(fēng)險(xiǎn)性,因此初學(xué)者不建議使用do...while循環(huán)。
public static void main(String[] args){ do{ System.out.println("無條件執(zhí)行一次"); }while(false); }
for 和 while 的小區(qū)別
- 控制條件語句所控制的那個(gè)變量,在for循環(huán)結(jié)束后,就不能再被訪問到了,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用,就用while,否則推薦使用for。原因是for循環(huán)結(jié)束,該變量就從內(nèi)存中消失,能夠提高內(nèi)存的使用效率。
- 在已知循環(huán)次數(shù)的時(shí)候使用推薦使用for,循環(huán)次數(shù)未知的時(shí)推薦使用while。
跳出語句
break
使用場景:終止switch或者循環(huán)
- 在選擇結(jié)構(gòu)switch語句中
- 在循環(huán)語句中
- 離開使用場景的存在是沒有意義的
public static void main(String[] args) { for (int i = 1; i<=10; i++) { //需求:打印完兩次HelloWorld之后結(jié)束循環(huán) if(i == 3){ break; } System.out.println("HelloWorld"+i); } }
continue
使用場景:結(jié)束本次循環(huán),繼續(xù)下一次的循環(huán)
public static void main(String[] args) { for (int i = 1; i <= 10; i++) { //需求:不打印第三次HelloWorld if(i == 3){ continue; } System.out.println("HelloWorld"+i); } }
死循環(huán)
死循環(huán):也就是循環(huán)中的條件永遠(yuǎn)為true,死循環(huán)的是永不結(jié)束的循環(huán)。例如:while(true){}。
嵌套循環(huán)
所謂嵌套循環(huán),是指一個(gè)循環(huán)的循環(huán)體是另一個(gè)循環(huán)。比如for循環(huán)里面還有一個(gè)for循環(huán),就是嵌套循環(huán)???共的循環(huán)次數(shù)=外循環(huán)次數(shù)*內(nèi)循環(huán)次數(shù) 嵌套循環(huán)格式:
for(初始化表達(dá)式①; 循環(huán)條件②; 步進(jìn)表達(dá)式⑦) { for(初始化表達(dá)式③; 循環(huán)條件④; 步進(jìn)表達(dá)式⑥) { 執(zhí)行語句⑤; } }
嵌套循環(huán)執(zhí)行流程: 執(zhí)行順序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥ 外循環(huán)一次,內(nèi)循環(huán)多次。 比如跳繩:一共跳5組,每組跳10個(gè)。5組就是外循環(huán),10個(gè)就是內(nèi)循環(huán)。
到此這篇關(guān)于一文詳解Java中流程控制語句的文章就介紹到這了,更多相關(guān)Java流程控制語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于@Autowierd && @Resource 你真的了解嗎
這篇文章主要介紹了關(guān)于@Autowierd && @Resource的具體使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java回調(diào)函數(shù)與觀察者模式實(shí)例代碼
這篇文章主要介紹了Java回調(diào)函數(shù)與觀察者模式實(shí)例代碼,簡單介紹了使用觀察者模式的場景,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02java servlet手機(jī)app訪問接口(二)短信驗(yàn)證
這篇文章主要介紹了java servlet手機(jī)app訪問接口(二),短信驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Lombok之@AllArgsConstructor的使用方式
這篇文章主要介紹了Lombok之@AllArgsConstructor的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例
這篇文章主要介紹了Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10Java使用JaCoCo進(jìn)行代碼覆蓋率分析的操作指南
JaCoCo是一個(gè)開源的 Java 代碼覆蓋率工具,廣泛應(yīng)用于測試過程中,它可以幫助開發(fā)者分析測試代碼的覆蓋情況,在本文中,我們將介紹 JaCoCo 的基本功能、如何集成到 Maven 項(xiàng)目中,以及通過具體案例展示如何生成覆蓋率報(bào)告,需要的朋友可以參考下2025-02-02通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程
java相對于其他語言(例如c,c++等)連接數(shù)據(jù)庫要方便得多,那么如何連接呢?下面這篇文章主要給大家介紹了關(guān)于通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程,需要的朋友可以參考下2023-03-03