# 表达式，语句和块

> 原文： [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html)

现在您已了解变量和运算符，现在是时候了解 _ 表达式 _，_ 语句 _ 和 _ 阻止 _。运算符可用于构建计算值的表达式;表达式是陈述的核心组成部分;语句可以分组为块。

## 表达式

_ 表达式 _ 是由变量，运算符和方法调用组成的构造，它们是根据语言的语法构造的，其值为单个值。您已经看过表达式的示例，如下面的粗体所示：

```
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

```

在编写复合表达式时，请明确并用括号表示应首先评估哪些运算符。这种做法使代码更易于阅读和维护。

## 声明

陈述大致相当于自然语言中的句子。 _ 语句 _ 构成一个完整的执行单元。通过用分号（`;`）终止表达式，可以将以下类型的表达式转换为语句。

*   作业表达
*   使用`++`或`--`
*   方法调用
*   对象创建表达式

这些陈述称为 _ 表达式陈述 _。以下是表达式语句的一些示例。

```
// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
System.out.println("Hello World!");
// object creation statement
Bicycle myBike = new Bicycle();

```

除了表达式语句之外，还有另外两种语句：_ 声明语句 _ 和 _ 控制流语句 _。 _ 声明语句 _ 声明一个变量。您已经看过很多声明语句的例子：

```
// declaration statement
double aValue = 8933.234;

```

最后，_ 控制流语句 _ 调节语句执行的顺序。您将在下一节[控制流程语句](flow.html)中了解控制流语句

## 块

_ 块 _ 是平衡括号之间的一组零个或多个语句，可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用：

```
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
     }
}

```