天天看點

《Java 7程式設計入門經典》一3.5 switch語句

java的第二個選擇語句是switch語句。switch語句提供了多個分支。于是,它使程式可以在多個選項中做出選擇。盡管一系列嵌套的if語句可以執行多路測試,在許多情況下,switch語句是更有效的方法。它像這樣工作:表達式的值與一系列的常數比較。當找到一個選項時,執行與這個比對項相關的語句序列。switch語句的一般形式為:

《Java 7程式設計入門經典》一3.5 switch語句
《Java 7程式設計入門經典》一3.5 switch語句

對于jdk 7以前的java版本,控制switch的表達式expression必須是byte、short、int、char或枚舉類型。(枚舉類型在第13章介紹。)從jdk 7開始,表達式expression也可以是string類型。這意味着,java的最新版本可以用字元串控制switch。(這個技術将在第5章描述string時介紹。)通常的情況是,控制switch的表達式僅僅是一個變量,而不是一個較大的表達式。

case語句指定的每個值都必須是一個常表達式(例如,字面量)。不允許出現相同的case選項。每個值的類型必須與控制表達式中的類型相容。

如果沒有case常量比對表達式,就執行default語句對應的序列。default語句是可選的。如果沒有出現default語句,且所有選項都不比對,就不執行任何語句。如果找到一個比對項,就執行與那個case相關的語句。直到出現break。對于case語句和default語句,會一直運作到switch語句才結束。

下面程式示範了switch的用法。

《Java 7程式設計入門經典》一3.5 switch語句
《Java 7程式設計入門經典》一3.5 switch語句

程式産生的輸出如下所示:

《Java 7程式設計入門經典》一3.5 switch語句

可以看到,每次循環時,執行與變量i比對的case常數相關的語句。其他語句不執行。當變量i大于等于5時,沒有比對的case語句,是以執行default語句。

從技術上說,break語句是可選的,盡管大多數的switch語句都會使用它。當在case的一系列語句序列中遇到break時,break語句使程式流從整個switch語句中退出,從switch外的下一個語句開始執行。但是,如果與case相關的語句序列沒有以break結尾,那麼目前case和之後case的所有語句都會執行,直到遇到break或switch結束。

例如,仔細學習以下程式。你能在看到輸出前指出螢幕上會顯示什麼嗎?

《Java 7程式設計入門經典》一3.5 switch語句
《Java 7程式設計入門經典》一3.5 switch語句

程式顯示以下輸出:

《Java 7程式設計入門經典》一3.5 switch語句

這個程式顯示,如果沒有出現break語句,就會繼續執行下一個case語句。

還有空的case語句,如下面這個例子:

《Java 7程式設計入門經典》一3.5 switch語句

在這個程式片段中,如果變量i的值為1、2、3,就執行第一個println()語句。如果變量i的值是4,執行第二個println()語句。在這個例子中,case語句的省略在多個case子句共享代碼時是很常見的。