Java 表達式、語句和塊
我們在前面的小節中,已經學習了變量和運算符。有了這些前置知識,我們就可以學習表達式、語句和塊了。
運算符可用于構建表達式,表達式可以進行值的計算,它是語句的核心組成部分;而語句是指令式編程語言中最小的獨立元素;多條語句又可以組成語句塊。本小節我們將學習表達式的概念和常用分類,也將了解到什么是語句和塊。
1. 表達式
1.1 概念
表達式,是由數字、運算符、數字分組符號(括號)、自由變量和約束變量等以能求得數值的有意義排列方法所得的組合。約束變量是在表達式中已被指定數值,而自由變量則可以在表達式之外另行指定數值。
在 Java
中,表達式是根據 Java 語法由變量、運算符和方法調用組成的結構,表達式的結算結果為單個值。
表達式實例:
public class Expression {
public static void main(String[] args) {
int a = 10, b = 20;
// (a + b) * 2 就是一個算數表達式
int c = (a + b) * 2;
// c > b 就是一個布爾表達式
if (c > b) { // if語句將在下一小節講到,此處只需知道 c > b 是一個表達式即可
System.out.println("c大于b");
}
}
}
上面代碼中,(a + b) * 2
就是一個算數表達式,而 c > b
就是一個布爾表達式,代碼中的 if
語句將在下一小節講到,此處只需知道 c > b 是一個表達式即可。
下面我們將圍繞算數表達式和布爾表達式來學習表達式。
1.2 分類
1.2.1 算數表達式
算數表達式是最常用的表達式,又稱為數學表達式。它是通過算術運算符來進行運算的數學公式。
為了使用 Java
進行算數運算,首先必須至少聲明一個變量。如下:
int num = 10;
變量創建后,可以使用算數運算符(+
、-
、*
、/
、 %
、++
、 --
)來操作變量的值。使用算數表達式的實例如下:
public class ArithmeticExpression1 {
public static void main(String[] args) {
int num = 10;
int result = num / 3;
System.out.println( num + " / 3 = " + result);
}
}
編譯執行程序,屏幕上將會打?。?/p>
10 / 3 = 3
對于操作數為整型的除法表達式,其計算結果將始終取整數部分。所以上面的 10 / 3
的結果等于 3
。如果我們想得到小數,可以使用浮點類型的變量來作為操作數(10.0 / 3
),其返回的值也是一個浮點型。
除了除法表達式之外,在使用自增 / 自減表達式運算的時候,也要額外注意前后自增 / 自減運算符的差別。我們來看下面一個實例:
public class ArithmeticExpression2 {
public static void main(String[] args) {
// 前自增
System.out.println("------ 前自增 ------");
int num = 10;
System.out.println("++num = " + (++num));
System.out.println("num = " + num);
// 前自減
System.out.println("------ 前自減 ------");
num = 10;
System.out.println("--num = " + (--num));
System.out.println("num = " + num);
// 后自增
System.out.println("------ 后自增 ------");
num = 10;
System.out.println("num++ = " + (num ++));
System.out.println("num = " + num);
// 前自減
System.out.println("------ 前自減 ------");
num = 10;
System.out.println("num-- = " + (num --));
System.out.println("num = " + num);
}
}
注意觀察前后自增自減的區別,運行結果:
------ 前自增 ------
++num = 11
num = 11
------ 前自減 ------
--num = 9
num = 9
------ 后自增 ------
num++ = 10
num = 11
------ 前自減 ------
num-- = 10
num = 9
結論:
-
前自增 / 自減的運算規則是:先進行自增或者自減運算,再進行表達式運算;
-
后自增 / 自減的運算規則是:先進行表達式運算,再進行自增或者自減運算。
1.2.2 布爾表達式
布爾表達式(Boolean expression)的結果只有 true
(真)和 false
(假)兩個值。在 Java
語言中,布爾表達式可以使用關系運算符或邏輯運算符來代替算數運算符。
我們來看一個使用關系運算符的實例:
public class BooleanExpression1 {
public static void main(String[] args) {
// 初始化兩個整型變量a、b,值分別為2、3
int a = 2, b = 3;
// 分別打印比較運算符比較的結果
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
}
}
請閱讀上面代碼,并算出每一次打印的結果。這里不再展示代碼打印結果。
布爾表達式常作為條件分支語句中的條件。因此下面的示例需要你對條件語句有一定的了解,我們再來看一個稍微復雜一些的實例:
public class BooleanExpression2 {
public static void main(String[] args) {
// 初始化4個整型變量
int i = 4, j = 5, k = 7, m = 8;
// i > j && m < k++ 即為條件表達式
if(i > j && m < k++) {
k++;
} else {
k--;
}
System.out.println("k = " + k);
}
}
編譯執行代碼,屏幕上將會打印:
k = 6
上述代碼,是使用邏輯運算符和算數運算符結合的布爾表達式示例,如果布爾表達式 i > j && m < k++
結果為真,則執行 if
分支,k 自增 1,否則執行 else
分支,k 自減 1,最后打印出 k 的值。由于 i
的值小于 j
,并且 &&
運算符有短路作用,所以 m < k++
不做運算,直接走到 else
分支,最后得到結果 k = 6
。
這里再次強調一下邏輯運算符的短路:
在表達式中 (a && b)
,如果 a 為假,則 b 不會被求值,因為無論如何表達式都會為假。
同理,在表達式中 (a || b)
,如果 a 為真,則 b 不會被求值,因為無論如何表達式都會為真。
這就是我們所說的短路。如果想要取消短路,可以使用 &
代替 &&
、使用 |
代替 ||
,但是不建議這樣寫,會降低代碼的可讀性。
試想,如果將表達式中 i > j && m < k++
的 &&
改為 &
,變量 k
的值將會是多少?
2. 語句
在計算機科學的編程中,一個語句是指令式編程語言中最小的獨立元素,語句用以表達程序要執行的一些動作。多數語句是以高級語言編寫成一個或多個語句的序列,用于命令計算機執行指定的一系列操作。
語句和自然語言(例如英語、漢語)中的句子大致相同。一條語句構成了完整的執行單元。通過使用英文分號(;
)終止表達式,可以將以下類型的表達式制成語句:
- 賦值表達式
- 自增 / 自減
++
或--
- 方法調用
- 對象創建表達式(面向對象部分將會學到)
請結合如下示例理解語句的概念:
變量聲明語句:
int age;
賦值語句:
age = 20;
自增語句:
age ++;
方法調用語句:
System.out.println("Hello World! ");
3. 塊
塊通常用來將兩條或多條語句組合在一起,使其在格式上看更像一條語句。
一堆語句可以放在大括號中,以作為單個塊執行??梢詾榇祟愓Z句命名或為其提供執行條件(下一節的條件判斷將會講到)。
下面是將一系列的語句放在一個塊中的示例代碼:
{
int a = 1;
int b = 2;
int c = 3;
int result = a + b + c;
}
4. 小結
本節我們學習了表達式,它的計算結果為單獨的值。還要特別注意前后自增 / 自減的區別,要理解邏輯運算符在表達式中的短路作用,這在任何語言的基礎面試中都會經??嫉健τ谡Z句和塊的概念,我們也有了一個初步的認識,想要完全理解這些內容,還需要繼續向下學習更多知識。下一小節開始,我們將學習 Java 條件語句、循環語句等內容,這些都將加深你對本節概念的理解。