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