Java中的分支結構

對於編程語言來說,必然存在三種結構,分別為:順序結構、分支結構和循環結構,當然,Java也不例外。

對於順序結構來說,沒啥好說的,就是代碼從上到下依次執行,期間不存在任何的條件判斷和跳轉。代碼編寫順序是什麼樣子,其執行順序就是什麼樣子。所以,我主要介紹的是另外兩種結構,也就是可以用來進行進行流程進行控制的結構,也即:分支結構和循環結構。

本篇我只介紹分支結構,至於循環結構留待下一篇文章再詳細介紹。

所謂分支結構就是根據判斷條件來有選擇地執行某一個分支的代碼。在Java中,支持的分支結構大概有兩種,分別為:if分支結構和switch分支結構。

if分支結構

所謂if分支結構就是指根據一個布爾值(直接指定或通過表達式計算得出)來決定執行哪個分支的代碼。

if分支結構可以認為存在三種形式,分別為:

<code>// 第一種形式
if(判斷條件) {
\t執行代碼
}

// 第二種形式
if (判斷條件) {
\t執行代碼

} else {
\t執行代碼
}

// 第三種形式
if (判斷條件1) {
\t執行代碼
} else if(判斷條件2) {
\t\t執行代碼
}
......
else if (判斷條件n) {
執行代碼
} else

{}/<code>

第一種形式的示例代碼如下圖所示:

Java中的分支結構

執行結果如下圖所示:

Java中的分支結構

第二種形式的示例代碼如下圖所示:

Java中的分支結構

其執行結果如下圖所示:

Java中的分支結構

第三種形式的示例代碼如下圖所示:

Java中的分支結構

執行結果如下圖所示:

Java中的分支結構

這裡需要說明一點的是,當大括號內的執行代碼只有一條語句(因為一行中可以有多條語句,執行被分號分開)時,該大括號可以省略。三種形式都大同小異,我就只選擇第一種來進行演示。示例代碼如下圖所示:

Java中的分支結構

如果大括號內的執行代碼是多條執行語句,貿然省略大括號,有時候會引起編譯錯誤,有時候雖然不會引起編譯錯誤,但執行結果也不見得是我們想要的。下面分別演示大括號內存在多條執行語句時,貿然省略大括號引起編譯錯誤與和不引起編譯錯誤但未獲得預期的執行結果的效果。

引起編譯錯誤的示例代碼如下圖所示:

Java中的分支結構

不引起編譯錯誤但是執行結果跟預期不一致的示例代碼如下圖所示:

Java中的分支結構

執行結果如下圖所示:

Java中的分支結構

可見,本來"hello world"該在滿足判斷條件的時候進行輸出,結果省略了大括號之後變成了必然輸出。所以,省略大括號的時候一定要慎重一點。

當然,為了編程的可讀性,在一般情況下,即使只有一條執行語句,我們也要加大括號。

switch分支結構

對於switch分支結構,其形式為:

<code>switch(值) {
case 判斷值1:
執行邏輯
break;
case 判斷值2:
執行邏輯
break;
...
case 判斷值n:
執行邏輯
default:
執行邏輯
}/<code>

當switch後面的括號中的值與下面所列case中的某個值對應上時,便開始執行對應值後面的代碼。在Java7之前,switch分支結構支持除long之外的整數類型(包括他們對應的包裝類型)、字符類型和枚舉類型。在Java7的時候又新增了對字符串類型的支持。

switch分支結構的示例代碼如下圖所示:

Java中的分支結構

執行結果如下圖所示:

Java中的分支結構

我想大家應該都發現,每一個case後面的執行代碼都跟著一個break。這裡的break是必須的。因為switch在遇到跟括號中匹配的值後,會一直往下執行,直到遇到首個break或執行到最後。 以上面的例子為例,如果將break都進行註釋,註釋後如下圖所示:

Java中的分支結構

執行之後會出現如下圖所示的結果:

Java中的分支結構

當然,這種做法有利有弊,有時候我們可以利用switch的這種特性,簡化代碼書寫,比如給定一個月輸出該月中的天數。當然,Java已經提供了現成的API,但是這裡暫不採用,我依然使用原始的方式來實現。

下圖為正常的寫法:

Java中的分支結構

執行結果如下圖所示:

Java中的分支結構

但是,我們可以利用switch分支不遇到break就會一直執行的特性來簡化該程序。簡化的代碼如下圖所示:

Java中的分支結構

執行的結果如下圖所示:

Java中的分支結構

所以,關於switch分支的這一特性,可以根據自己的需求來靈活使用。需要強調的是,即使是default,後面也一定要加break。雖然習慣上講default放在最後面,但是語法上是允許將default放在任意位置的。這在日常開發中不會遇到,但若是在面試的時候,保不定會遇到奇葩的面試題,到時候也不至於掉到坑中。

至此,關於Java中分支結構便已介紹完畢,希望大家都能掌握。


分享到:


相關文章: