1. 表达式
1.1 概念
在 Java
中,表达式是根据 Java 语法由变量、运算符和方法调用组成的结构,表达式的结算结果为单个值。
表达式实例:
上面代码中,(a + b) * 2
就是一个算数表达式,而 c > b
就是一个布尔表达式,代码中的 if
语句将在下一小节讲到,此处只需知道 c > b 是一个表达式即可。
下面我们将围绕算数表达式和布尔表达式来学习表达式。
1.2 分类
1.2.1 算数表达式
算数表达式是最常用的表达式,又称为数学表达式。它是通过算术运算符来进行运算的数学公式。
为了使用 Java
进行算数运算,首先必须至少声明一个变量。如下:
- 1
变量创建后,可以使用算数运算符(+
、-
、*
、/
、 %
、++
、 --
)来操作变量的值。使用算数表达式的实例如下:
编译执行程序,屏幕上将会打印:
- 1
对于操作数为整型的除法表达式,其计算结果将始终取整数部分。所以上面的 10 / 3
的结果等于 3
。如果我们想得到小数,可以使用浮点类型的变量来作为操作数(10.0 / 3
),其返回的值也是一个浮点型。
除了除法表达式之外,在使用自增 / 自减表达式运算的时候,也要额外注意前后自增 / 自减运算符的差别。我们来看下面一个实例:
注意观察前后自增自减的区别,运行结果:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
结论:
前自增 / 自减的运算规则是:先进行自增或者自减运算,再进行表达式运算;
后自增 / 自减的运算规则是:先进行表达式运算,再进行自增或者自减运算。
1.2.2 布尔表达式
布尔表达式(Boolean expression)的结果只有 true
(真)和 false
(假)两个值。在 Java
语言中,布尔表达式可以使用关系运算符或逻辑运算符来代替算数运算符。
我们来看一个使用关系运算符的实例:
请阅读上面代码,并算出每一次打印的结果。这里不再展示代码打印结果。
布尔表达式常作为条件分支语句中的条件。因此下面的示例需要你对条件语句有一定的了解,我们再来看一个稍微复杂一些的实例:
编译执行代码,屏幕上将会打印:
- 1
上述代码,是使用逻辑运算符和算数运算符结合的布尔表达式示例,如果布尔表达式 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. 语句
在计算机科学的编程中,一个语句是指令式编程语言中最小的独立元素,语句用以表达程序要执行的一些动作。多数语句是以高级语言编写成一个或多个语句的序列,用于命令计算机执行指定的一系列操作。
语句和自然语言(例如英语、汉语)中的句子大致相同。一条语句构成了完整的执行单元。通过使用英文分号(;
)终止表达式,可以将以下类型的表达式制成语句:
- 赋值表达式
- 自增 / 自减
++
或--
- 方法调用
- 对象创建表达式(面向对象部分将会学到)
请结合如下示例理解语句的概念:
变量声明语句:
- 1
赋值语句:
- 1
自增语句:
- 1
方法调用语句:
- 1
3. 块
块通常用来将两条或多条语句组合在一起,使其在格式上看更像一条语句。
一堆语句可以放在大括号中,以作为单个块执行。可以为此类语句命名或为其提供执行条件(下一节的条件判断将会讲到)。
下面是将一系列的语句放在一个块中的示例代码:
- 1
- 2
- 3
- 4
- 5
- 6
4. 小结
本节我们学习了表达式,它的计算结果为单独的值。还要特别注意前后自增 / 自减的区别,要理解逻辑运算符在表达式中的短路作用,这在任何语言的基础面试中都会经常考到。对于语句和块的概念,我们也有了一个初步的认识,想要完全理解这些内容,还需要继续向下学习更多知识。下一小节开始,我们将学习 Java 条件语句、循环语句等内容,这些都将加深你对本节概念的理解。