Expressions,Statements and Blocks
表达式
表达式是由变量、运算符和方法调用构成的结构,这些元素遵循语言语法规则组合而成,最终求解为单一值。你已经见过表达式的实例,如下代码所示:
int cadence = 0;
anArray[0] = 100;
IO.println("Element 1 at index 0: " + anArray[0]);
int result = 1 + 2; // result is now 3
if (value1 == value2){
IO.println("value1 == value2");
}
表达式返回值的数据类型取决于表达式中使用的元素。表达式 cadence = 0 返回 int 类型,因为赋值运算符返回的值与其左操作数具有相同数据类型;在此例中,cadence 是 int 类型。从其他表达式可见,表达式也可返回其他类型的值,例如布尔值或字符串。
Java编程语言允许你将多个较小的表达式组合成复合表达式,前提是表达式各部分所需的数据类型相互匹配。以下是一个复合表达式的示例:
1 * 2 * 3;
在此特定示例中,表达式的求值顺序并不重要,因为乘法结果与顺序无关;无论采用何种顺序进行乘法运算,结果始终相同。然而,并非所有表达式都如此。例如,以下表达式根据先执行加法还是除法操作,会产生不同的结果:
x + y / 100; // ambiguous
你可以使用平衡括号(和)精确指定表达式的求值方式。例如,为消除前一个表达式的歧义,可改写为:
(x + y) / 100; // unambiguous, recommended
若未明确指定运算顺序,则由表达式中运算符的优先级决定。优先级较高的运算符将优先进行求值。例如,除法运算符的优先级高于加法运算符。因此,以下两条语句是等效的:
x + y / 100; // ambiguous
x + (y / 100); // unambiguous, recommended
在编写复合表达式时,请明确使用括号标注应优先运算的运算符。此做法能使代码更易于阅读和维护。
浮点运算
浮点运算是一个特殊的世界,其中常见操作可能会表现出意想不到的行为。请看以下代码。
double d1 = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
IO.println("d1 == 1 ? " + (d1 == 1.0));
你可能会认为它会输出 true。但由于浮点数加法运算及舍入规则的影响,实际输出结果为 false。
本教程不涉及Java中浮点运算的具体实现方式。若需深入了解该主题,可观看以下视频。
语句
语句大致相当于自然语言中的句子。一个语句构成完整的执行单元。以下类型的表达式可通过在表达式末尾添加分号(;)转换为语句:
- 赋值表达式
- 任何使用 ++ 或者 – 运算符的表达式
- 方法调用表达式
- 对象创建表达式
- 此类语句称为表达式语句。以下是一些表达式语句的示例。
// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
IO.println("Hello, World!");
// object creation statement
Bicycle myBike = new Bicycle();
除了表达式语句外,还有另外两种语句:声明语句和控制流语句。声明语句用于声明变量。你已经见过许多声明语句的例子:
// declaration satement
double aValue = 8933.234;
最后,控制流语句用于控制语句的执行顺序。您将在下一节“控制流语句”中学习相关知识。
代码块
代码块是由一组零个或多个语句组成的结构,这些语句被配对的大括号包围,可在允许单个语句的任何位置使用。以下示例 BlockDemo 演示了代码块的用法:
public class BlockDemo {
public static void main(String[] args) {
boolean condition = true;
if (condition) { // begin block 1
IO.println("Condition is true");
}// end block one
else { // begin block 2
IO.println("Condition is false");
} // end block 2
}
}