Java 條件語句
條件語句通過判斷給定條件的真假來控制程序的執(zhí)行。在上一小節(jié)中,我們已經簡要介紹過了語句和塊的概念。那么本小節(jié)我們將進一步展開介紹 Java
中所有類型的條件語句。
1. if 語句
1.1 語法
當我們需要根據(jù)給定的條件來決定是否執(zhí)行一段代碼時,if
語句就派上用場了。if
塊僅在與其關聯(lián)的布爾表達式為 true
時執(zhí)行。if
塊的結構如下:
if (條件) {
// 當條件成立時執(zhí)行此處代碼
}
大括號中包含的內容就稱為語句塊。
1.2 實例
我們來看一個 if
語句的實例:
public class IfStatement1 {
public static void main(String args[]) {
int age = 18;
if(age >= 18) {
System.out.println("在中國你已經成年");
}
}
}
運行結果:
在中國你已經成年
當條件age >= 18
成立時,也就是布爾表達式計算結果為 true
(真),if
語句塊會執(zhí)行。顯然上面實例中 age
變量的值為 18,條件是成立的,執(zhí)行程序,屏幕上將會打印 “在中國你已經成年”。
如果語句塊內只有一條語句,我們也可以去掉花括號 {}
:
if(age >= 18)
System.out.println("在中國你已經成年");
當然,即使 if
語句塊只有一條語句,也并不推薦這種不易于閱讀的寫法。
2. if … else … 語句
2.1 語法
if
語句可以結合 else
來使用,當布爾表達式計算結果為 false
(假)時,else
語句塊將會執(zhí)行。
if .. .else
語句用于有條件地執(zhí)行兩個代碼塊的其中一個,具體執(zhí)行哪一個代碼塊,取決于布爾條件的結果。
if (條件) {
// 如果條件成立,執(zhí)行此處代碼
} else {
// 如果條件不成立,執(zhí)行此處代碼
}
2.2 實例
改寫上面 if
語句的代碼:
public class IfElseStatement1 {
public static void main(String args[]) {
int age = 15;
if(age >= 18) {
System.out.println("在中國你已經成年");
} else {
System.out.println("在中國你還未成年");
}
}
}
運行結果:
在中國你還未成年
我們將變量 age
賦值為 15,并且在 if
語句塊的后面加了一段 else {...}
語句塊。這個時候,條件 age >= 18
的計算結果就為 false
了,程序將會執(zhí)行 else
語句塊中的代碼。執(zhí)行代碼,屏幕將會打印 "在中國你還未成年"。
補充
Java 支持使用條件表達式(又稱三目運算符)
表達式1 ? 表達式2 : 表達式3
來簡化if else
語句的代碼。表達式 1 的作用等同于
if
語句后面的條件,如果表達式 1 為true
, 則執(zhí)行表達式2
, 否則執(zhí)行表達式3
也就是說上面的代碼可以使用三目運算符來實現(xiàn)同樣的功能。實例如下:
public class IfElseStatement2 {
public static void main(String args[]) {
int age = 15;
System.out.println(age >= 18 ? "在中國你已經成年" : "在中國你還未成年");
}
}
3. if … else if … else 語句
3.1 語法
if
語句可以結合else if
來實現(xiàn)更復雜的程序分支結構:
if (條件1) {
// 如果條件1成立,執(zhí)行此處代碼
} else if (條件2) {
// 如果條件1不成立,并且條件2成立,執(zhí)行此處代碼
} else {
// 如果條件1、條件2都不成立,執(zhí)行此處代碼
}
3.2 實例
if
語句可以搭配任意多數(shù)量的 else if
語句使用,但是只能有一個 else
。下面我們來看一段代碼:
// 根據(jù)給定分數(shù)向屏幕打印評級
public class IfElseIfStatement {
public static void main(String args[]) {
int score = 70;
if (score >= 90) {
System.out.println("優(yōu)秀");
} else if(score >= 70) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
運行結果:
良好
運行結果為 "良好",你也許會疑惑,score 為 70,同樣也大于等于 60,為什么沒有輸入 "及格" 呢?
這是由于當程序遇到符合條件的分支就會執(zhí)行其分支語句塊中的語句,不會執(zhí)行其他分支語句塊的語句。
3.3 嵌套 if … else 語句
你也可以在另一個 if
或者 else if
語句中使用 if
或者 else if
語句:
if(條件1){
// 如果條件1為真,執(zhí)行這里的語句
if(條件2){
////如果條件2為真,執(zhí)行這里的語句
}
}
我們來看一個嵌套語句的實例:
public class IfElseStatement1 {
public static void main(String[] args) {
// 初始化整型變量age,值為25
int age = 25;
int sex = 1; // 此處用sex變量表示性別,1:男 2:女
if(age >= 20) {
System.out.println("在中國你已經成年");
if(sex == 2) {
System.out.println("并且到了法定的結婚年齡");
}
if(sex == 1 && age >= 22) {
System.out.println("并且到了法定的結婚年齡");
}
} else {
System.out.println("在中國你還未成年");
}
}
}
運行結果:
在中國你已經成年
并且到了法定的結婚年齡
4. switch 語句
4.1 語法
switch
條件語句可以理解為簡寫版的多個 if .. else
語句。switch
語句的語法如下:
switch (值) {
case 值1:
語句1.1
...
語句n.1
break;
case 值2:
語句2.1
...
語句2.n
break;
default:
語句n.1
...
語句n.n
}
switch case 語句有如下規(guī)則:
- switch 語句中的變量類型可以是:
byte
、short
、int
、char
或者String
; - switch 語句可以擁有多個 case 語句。每個 case 后面跟一個要比較的值和冒號;
- case 語句中的值的數(shù)據(jù)類型必須與變量的數(shù)據(jù)類型相同,而且只能是常量或者字面常量;
- 當變量的值與 case 語句的值相等時,那么 case 語句之后的語句開始執(zhí)行,直到 break 語句出現(xiàn)才會跳出 switch 語句;
- 當遇到 break 語句時,switch 語句終止。程序跳轉到 switch 語句后面的語句執(zhí)行。case 語句不一定要包含 break 語句。如果沒有 break 語句出現(xiàn),程序會繼續(xù)執(zhí)行下一條 case 語句,直到出現(xiàn) break 語句;
- switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最后一個分支(可以在任何位置,但建議在最后一個)。default 在沒有 case 語句的值和變量值相等的時候執(zhí)行。default 分支不需要 break 語句。
4.2 實例
我們先來看下面的一個簡單實例:
public class SwitchStatement1 {
public static void main(String args[]) {
int i = 2;
switch (i) {
case 1:
// i 的值不等于1,所以不執(zhí)行此處代碼
System.out.println("i的值為1");
break;
case 2:
// i 的值等于2,所以執(zhí)行此處代碼
System.out.println("i的值為2");
break;
default:
// case 2 分支已執(zhí)行并break,所以此處代碼不會執(zhí)行
System.out.println("i的值既不等于1,也不等于2");
}
}
}
運行結果:
i的值為2
從 JDK5 開始,switch
語句可以與 枚舉值一起使用。 例如,下面是根據(jù)數(shù)字顯示對應星期幾的實例代碼:
public class SwitchStatement2 {
public static void main(String args[]) {
Day day = day.MONDAY; // 假設 Day 是一種枚舉類型,里面包含星期一到星期天。
switch (day) {
case MONDAY :
System.out.println("星期一");
break;
case TUESDAY :
System.out.println("星期二");
break;
case WEDNESDAY :
System.out.println("星期三");
break;
case THURSDAY :
System.out.println("星期四");
break;
case FRIDAY :
System.out.println("星期五");
break;
case SATURDAY :
System.out.println("星期六");
break;
case SUNDAY :
System.out.println("星期天");
}
}
}
從 JDK8 開始,switch
語句可以與 String
值一起使用:
public class SwitchStatement3 {
public static void main(String args[]) {
String day = "TUESDAY";
switch (day) {
case "Wednesday" :
System.out.println("星期一");
break;
case "TUESDAY" :
System.out.println("星期二");
break;
case "WEDNESDAY" :
System.out.println("星期三");
break;
case "THURSDAY" :
System.out.println("星期四");
break;
case "FRIDAY" :
System.out.println("星期五");
break;
case "SATURDAY" :
System.out.println("星期六");
break;
case "SUNDAY" :
System.out.println("星期天");
}
}
}
星期二
5. 小結
在 Java 中,條件語句主要有 if
語句和 switch
語句兩種。在實際的編碼中,條件語句非常常用,要根據(jù)合適的場景選擇使用,例如對于多個 ==
判斷的情況下,使用 switch
語句就更加清晰。而對于復雜的條件表達式,選擇 if
語句就更適合。
對于 if
語句的使用,建議:
- 每個分支都要用
{}
括起來; - 當有多個
if ... else
的時候,要注意判斷順序,把可能性越大的分支越排在越前面; if ... else
語句的嵌套層級不要太深。
對于 switch
語句的使用,建議:
- 每個分支都不要漏寫
break
; - 總是寫上
default
分支。