第10章

Java表达式和语句

理解表达式求值和语句执行的原理与应用

学习目标

Java表达式概述

表达式是Java程序的基本构建块,它由操作数和运算符组成,用于计算并产生一个值。理解表达式的求值规则对于编写正确和高效的Java程序至关重要。

表达式 vs 语句:
• 表达式:计算并产生一个值,如 a + bx > 5
• 语句:执行一个动作,如 int x = 10;System.out.println();

算术表达式

示例:
int a = 10, b = 3;
int sum = a + b;        // 13
int difference = a - b; // 7
int product = a * b;    // 30
int quotient = a / b;   // 3
int remainder = a % b;  // 1
  • 加法、减法、乘法运算
  • 除法和取模运算
  • 一元运算符(+、-)
  • 自增自减运算符(++、--)

关系表达式

示例:
int x = 5, y = 10;
boolean isEqual = (x == y);     // false
boolean isNotEqual = (x != y);  // true
boolean isGreater = (x > y);    // false
boolean isLessEqual = (x <= y); // true
  • 相等性比较(==、!=)
  • 大小比较(>、<、>=、<=)
  • 返回布尔值
  • 常用于条件判断

逻辑表达式

示例:
boolean a = true, b = false;
boolean and = a && b;  // false
boolean or = a || b;   // true
boolean not = !a;      // false

// 短路求值
boolean result = (x > 0) && (y / x > 2);
  • 逻辑与(&&)
  • 逻辑或(||)
  • 逻辑非(!)
  • 支持短路求值

运算符优先级

运算符优先级决定了表达式中运算符的执行顺序。理解优先级规则有助于编写正确的表达式和避免逻辑错误。

优先级 运算符 描述 结合性
1(最高) () [] . 括号、数组访问、成员访问 左到右
2 ++ -- + - ! ~ 一元运算符 右到左
3 * / % 乘法、除法、取模 左到右
4 + - 加法、减法 左到右
5 << >> >>> 位移运算 左到右
6 < <= > >= instanceof 关系运算 左到右
7 == != 相等性比较 左到右
8 & 按位与 左到右
9 ^ 按位异或 左到右
10 | 按位或 左到右
11 && 逻辑与 左到右
12 || 逻辑或 左到右
13 ? : 三元条件运算符 右到左
14(最低) = += -= *= /= %= 赋值运算符 右到左
注意:当不确定运算符优先级时,建议使用括号明确指定运算顺序,这样可以提高代码的可读性和避免错误。
优先级示例:
// 不使用括号(依赖优先级)
int result1 = 2 + 3 * 4;        // 14 (先乘后加)
boolean flag1 = 5 > 3 && 2 < 4; // true (先比较后逻辑)

// 使用括号(明确顺序)
int result2 = (2 + 3) * 4;      // 20
boolean flag2 = (5 > 3) && (2 < 4); // true (更清晰)

Java语句类型

语句是Java程序的执行单元,用于执行特定的动作。Java中有多种类型的语句,每种都有其特定的用途和语法。

主要语句类型

表达式语句

由表达式加分号组成,用于执行计算或方法调用。

// 赋值语句
int x = 10;
y += 5;

// 方法调用语句
System.out.println("Hello");
Math.sqrt(16);

// 自增自减语句
i++;
--count;

声明语句

用于声明变量、常量或方法,定义程序的结构。

// 变量声明
int age;
String name = "张三";

// 常量声明
final double PI = 3.14159;

// 数组声明
int[] numbers = new int[10];

控制流语句

控制程序的执行流程,包括条件语句、循环语句等。

// 条件语句
if (x > 0) {
    System.out.println("正数");
}

// 循环语句
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

// 跳转语句
break;
continue;
return result;

实际应用示例

通过一个表达式计算器的例子,我们来看看如何在实际项目中应用表达式和语句的知识。

表达式计算器示例:
public class ExpressionCalculator {
    public static void main(String[] args) {
        // 声明语句
        double a = 10.5;
        double b = 3.2;
        double c = 2.0;
        
        // 算术表达式
        double sum = a + b + c;                    // 15.7
        double average = sum / 3;                  // 5.233...
        double complex = a * 2 + b * 3 - c;       // 30.6
        
        // 关系表达式
        boolean isPositive = (average > 0);       // true
        boolean isEven = ((int)sum % 2 == 0);     // false
        
        // 逻辑表达式
        boolean isValid = isPositive && (sum < 100); // true
        
        // 条件表达式(三元运算符)
        String result = isValid ? "有效" : "无效";  // "有效"
        
        // 表达式语句(输出结果)
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println("总和 = " + sum);
        System.out.println("平均值 = " + average);
        System.out.println("复合表达式结果 = " + complex);
        System.out.println("结果验证:" + result);
    }
}
💻 查看完整代码 - 在线IDE体验

常见问题和注意事项

表达式求值陷阱

整数除法截断:
int result = 7 / 3; 结果是 2,不是 2.33...
解决方案:使用浮点数除法 double result = 7.0 / 3;
自增自减的副作用:
int i = 5; int j = ++i + i++; 结果可能不是预期的
建议:避免在同一表达式中多次修改同一变量

最佳实践

编写清晰的表达式:
• 使用括号明确运算顺序
• 避免过于复杂的表达式
• 合理使用变量存储中间结果
• 注意数据类型的匹配和转换

本章小结