现在你已经了解了变量和操作符,下面开始学习表达式(expression)、语句(statement)和块(block)。操作符可以用来构建表达式,用表达式来计算值;表达式是语句的核心成分;而语句又可以分为多个块。
3.3.1 表达式
表达式(expression)是由变量、操作符和方法调用构成的结构,表达式是按照语言的语法构成的,它计算出单一值。你已经见到过表达式的例子,在下面用粗体显示:
int cadence = 0 ;
anArray[0] = 100 ;
System.out.println("Element 1 at index 0: " + anArray[0]);
int result = 1 + 2 ; // result is now 3
if(value1 == value2 ) System.out.println("value1 == value2" );
表达式的返回值的数据类型取决于表达式中使用的元素。表达式cadence = 0返回int类型,因为赋值操作符的返回值的数据类型与其左侧操作数的数据类型相同,在这个例子中,cadence是int类型。从其他表达式中可以看到,表达式也可以返回其他类型的值,如boolean或者String。
Java编程语言允许用各种较小的表达式构成复合表达式,条件是表达式各个部分的数据类型要相匹配。下面是一个复合表达式的例子:
1 * 2 * 3
在这个特定的例子中,表达式的运算次序并不重要,因为相乘的结果与次序无关;无论相乘的次序是什么,结果总是一样的。但是,并非所有表达式都是这样。例如,对于下面的表达式,以不同的次序执行加法和除法操作,会得出不同的结果:
x + y / 100 // ambiguous
可以通过使用成对的圆括号“(”和“)”精确地指定表达式的运算次序。例如,要使前面的表达式意思明确,可以这样写:
(x + y) / 100 // unambiguous, recommended
如果不明确地指定操作符的执行次序,那么执行次序由表达式中使用的操作符的优先级决定。具有较高优先级的操作符先被运算。例如,除法操作符的优先级比加法操作符高,所以下面两个语句是等效的:
x + y / 100
x + (y / 100) // unambiguous, recommended
在写复合表达式时,应该用圆括号明确指定哪些操作符应该先被运算。这种编程习惯可以使代码更易于阅读和维护。
3.3.2 语句
语句大致相当于自然语言中的句子。语句(statement)组成了一个完整的执行单元。下面的表达式类型以一个分号(;)结尾时可以组成一个语句:
l 赋值表达式
l ++或--
l 方法调用
l 对象创建表达式
这些语句类型被称为表达式语句(expression statement)。下面是一些表达式语句的例子:
aValue = 8933.234; // assignment statement
aValue++; // increment statement
System.out.println("Hello World!"); // method invocation
// statement
Bicycle myBike = new Bicycle(); // object creation
// statement
除了这些表达式语句,还有另外两种语句。声明语句(declaration statement)和控制流语句(control flow statement)。声明语句声明一个变量。你已经见过许多声明语句的例子。
double aValue = 8933.234; // declaration statement
最后,控制流语句控制语句的执行次序。3.4节将讲解控制流语句。
3.3.3 块
块(block)是位于成对括号之间的零个或者多个语句的语句组,可以在允许使用单一语句的任何位置使用块。下面的示例BlockDemo演示块的使用:
class BlockDemo {
public static void main(String[] args) {
boolean condition = true;
if (condition) { // begin block 1
System.out.println("Condition is true.");
} // end block one
else { // begin block 2
System.out.println("Condition is false.");
} // end block 2
}
}
问题和练习:表达式、语句和块
问题
1. 操作符可以用于构成___,它计算出值。
2. 表达式是___的核心成分。
3. 语句可以分组为___。
4. 下面的代码段是___表达式的例子。
1 * 2 * 3
5. 语句大致相当于自然语言中的句子,但是语句不是以点号结束,而是以___结束。
6. 块是位于成对___之间的零个或者多个语句的语句组,可以在允许使用单一语句的任何位置使用块。
练习
识别下面表达式语句的类型:
l aValue = 8933.234;
l aValue++;
l System.out.println("Hello World!");
l Bicycle myBike = new Bicycle();
答案
可以在以下位置找到“问题”和“练习”的答案:
tutorial/java/nutsandbolts/QandE/answers_expressions.html