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

