33.md 3.9 KB
Newer Older
W
init  
wizardforcel 已提交
1 2 3 4
# 表达式,语句和块

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

W
wizardforcel 已提交
5
现在您已了解变量和运算符,现在是时候了解*表达式**语句**阻止*。运算符可用于构建计算值的表达式;表达式是陈述的核心组成部分;语句可以分组为块。
W
init  
wizardforcel 已提交
6 7 8

## 表达式

W
wizardforcel 已提交
9
*表达式*是由变量,运算符和方法调用组成的构造,它们是根据语言的语法构造的,其值为单个值。您已经看过表达式的示例,如下面的粗体所示:
W
init  
wizardforcel 已提交
10

W
wizardforcel 已提交
11
```java
W
init  
wizardforcel 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24 25
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 编程语言就允许您从各种较小的表达式构造复合表达式。以下是复合表达式的示例:

W
wizardforcel 已提交
26
```java
W
init  
wizardforcel 已提交
27 28 29 30 31 32 33

1 * 2 * 3

```

在这个特定的例子中,表达式的计算顺序并不重要,因为乘法的结果与顺序无关;结果总是相同的,无论您采用乘法的顺序。但是,并非所有表达式都是如此。例如,以下表达式给出不同的结果,具体取决于您是先执行加法还是除法运算:

W
wizardforcel 已提交
34
```java
W
init  
wizardforcel 已提交
35 36 37 38 39 40
x + y / 100    // ambiguous

```

您可以使用平衡括号精确指定表达式的计算方式:(和)。例如,要使前一个表达式明确,您可以编写以下内容:

W
wizardforcel 已提交
41
```java
W
init  
wizardforcel 已提交
42 43 44 45 46 47 48

(x + y) / 100  // unambiguous, recommended

```

如果未明确指示要执行的操作的顺序,则顺序由分配给表达式中使用的运算符的优先级确定。首先评估具有更高优先级的运算符。例如,除法运算符的优先级高于加法运算符。因此,以下两个陈述是等效的:

W
wizardforcel 已提交
49
```java
W
init  
wizardforcel 已提交
50 51 52 53 54 55 56 57 58 59
x + y / 100 

x + (y / 100) // unambiguous, recommended

```

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

## 声明

W
wizardforcel 已提交
60
陈述大致相当于自然语言中的句子。*语句*构成一个完整的执行单元。通过用分号(`;`)终止表达式,可以将以下类型的表达式转换为语句。
W
init  
wizardforcel 已提交
61 62 63 64 65 66

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

W
wizardforcel 已提交
67
这些陈述称为*表达式陈述*。以下是表达式语句的一些示例。
W
init  
wizardforcel 已提交
68

W
wizardforcel 已提交
69
```java
W
init  
wizardforcel 已提交
70 71 72 73 74 75 76 77 78 79 80
// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
System.out.println("Hello World!");
// object creation statement
Bicycle myBike = new Bicycle();

```

W
wizardforcel 已提交
81
除了表达式语句之外,还有另外两种语句:*声明语句**控制流语句**声明语句*声明一个变量。您已经看过很多声明语句的例子:
W
init  
wizardforcel 已提交
82

W
wizardforcel 已提交
83
```java
W
init  
wizardforcel 已提交
84 85 86 87 88
// declaration statement
double aValue = 8933.234;

```

W
wizardforcel 已提交
89
最后,*控制流语句*调节语句执行的顺序。您将在下一节[控制流程语句](flow.html)中了解控制流语句
W
init  
wizardforcel 已提交
90 91 92

## 块

W
wizardforcel 已提交
93
*块*是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用:
W
init  
wizardforcel 已提交
94

W
wizardforcel 已提交
95
```java
W
init  
wizardforcel 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108
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
     }
}

```