Java学习笔记(三):运算符、表达式与控制语句

一、学习内容

学习了《Java面向对象程序设计(第4版)》第三章,主要内容包括:

  1. 算术运算符与算术表达式
  2. 关系运算符与关系表达式
  3. 逻辑运算符与逻辑表达式
  4. 赋值运算符与赋值表达式
  5. 位运算符
  6. instanceof 运算符
  7. 一般表达式
  8. 语句概述
  9. 控制语句(if、switch、循环)

二、重点知识整理

2.1 算术运算符

运算符表格
运算符 含义 示例 结果(示例)
+ 加 5 + 3 8
- 减 5 - 3 2
* 乘 5 * 3 15
/ 除 5 / 2 2(整数除法)
% 取余 5 % 2 1
++ 自增 i++ 或 ++i 变量加1
– 自减 i– 或 –i 变量减1

注意:整数除法会舍弃小数部分,想要保留小数需要用浮点数。

自增运算符的细节(重要!):

int a = 5;
int b = a++; // 先赋值(b=5),后自增(a=6)
int c = ++a; // 先自增(a=7),后赋值(c=7)
System.out.println(“a=” + a); // 7
System.out.println(“b=” + b); // 5
System.out.println(“c=” + c); // 7
AI写代码
java
运行
这个代码块展示了Java中的自增操作符(++)的两种用法:后缀(a++)和前缀(++a),以及它们的执行顺序对变量值的影响。注释部分解释了关键步骤的行为。

2.2 关系运算符

运算符与含义对照表
运算符 含义 示例

大于 a > b
< 小于 a < b
= 大于等于 a >= b
<= 小于等于 a <= b
== 等于 a == b
!= 不等于 a != b
关系表达式的结果是布尔值:truefalse

2.3 逻辑运算符

运算符 含义 规则
&& 逻辑与 两边操作数都为 true 时,结果才为 true
|| 逻辑或 当至少一边为真时结果为真
! 逻辑非 取反操作,true 变 false,false 变 true
短路特性(重要!):

// 示例1: && 运算符的短路行为(左侧为false时,右侧不执行)
int a = 10;
if (a > 100 && ++a > 0) { // a > 100 是false,因此++a不会执行
// 这个代码块不会执行
}
System.out.println(a); // 输出: 10,因为++a未执行

// 示例2: || 运算符的短路行为(左侧为true时,右侧不执行)
int b = 10;
if (b > 5 || ++b > 0) { // b > 5 是true,因此++b不会执行
// 这个代码块会执行
}
System.out.println(b); // 输出: 10,因为++b未执行

AI写代码
java
运行

2.4 赋值运算符

以下是常见赋值运算符的表格,列出了它们的含义、使用示例以及等价形式。这些运算符在编程中常用于简化赋值操作,提高代码可读性。表格基于您提供的内容整理,并确保所有数学表达式使用…
.
.
.
…格式进行呈现。

运算符 含义 示例 等价于
= 赋值 a = 10 -
+= 加后赋值 a += 5 a = a + 5
-= 减后赋值 a -= 5 a = a - 5
*= 乘后赋值 a *= 5 a = a *5
/= 除后赋值 a /= 5 a = a / 5
%= 取余后赋值 a %= 5
a = a % 5

2.5 运算符优先级(从高到低)

以下是您提供的运算符优先级列表格式化为规范的表格:

优先级 运算符
1(最高) (); []; .
2 ++ ;– ;!(单目运算符)
3 *; / ;%
4 +; -
5 < > ;<= ;>=
6 == ;!=
7 &&
8 ||
9(最低) = ;+= ;-= (等赋值运算符)

建议:记不清优先级时,用 () 括号明确顺序,代码也更易读。

2.6 instanceof 运算符

判断一个对象是否属于某个类(第4章会详细讲,这里先了解)

String name = “张三”;
boolean result = name instanceof String; // true
int[] arr = new int[5];
boolean result2 = arr instanceof int[]; // true

AI写代码
java
运行
2.7 语句分类

类型 说明 示例
方法调用语句 调用方法 System.out.println(“hello”);
表达式语句 以分号结尾的表达式 a = 10; i++;
复合语句 用{}括起来的多条语句 { int x=1; x++; }
空语句 只有一个分号 ;
控制语句 分支、循环等 if() for() while()
三、控制语句详解

3.1 条件分支语句

  1. if语句
    if语句用于基于布尔条件进行分支判断。它有多种形式,从简单到复杂。

单分支if
当条件为true时执行代码块。

if (条件) {
// 条件为true时执行
}
AI写代码
java
运行
示例:检查数字是否为正数。
int num = 5;
if (num > 0) {
System.out.println(“数字是正数”);
}
AI写代码
java
运行
双分支if-else
当条件为true时执行一个分支,否则执行另一个分支。

if (条件) {
// 条件为true时执行
} else {
// 条件为false时执行
}
AI写代码
java
运行
示例:判断数字是否偶数。
int num = 4;
if (num % 2 == 0) {
System.out.println(“数字是偶数”);
} else {
System.out.println(“数字是奇数”);
}
AI写代码
java
运行
多分支if-else if-else
用于多个条件判断,依次检查条件,直到匹配或执行默认分支。

if (条件1) {
// 条件1为true时执行
} else if (条件2) {
// 条件2为true时执行
} else {
// 所有条件都不匹配时执行
}
AI写代码
java
运行
示例:根据分数划分等级。
int score = 85;
char grade;
if (score >= 90) {
grade = ‘A’;
} else if (score >= 80) {
grade = ‘B’;
} else if (score >= 70) {
grade = ‘C’;
} else if (score >= 60) {
grade = ‘D’;
} else {
grade = ‘F’;
}
System.out.println(“等级: “ + grade);
AI写代码
java
运行

  1. switch语句
    switch语句用于基于表达式的值匹配多个固定选项。它比if-else if更简洁,适用于离散值比较。语法包括case分支和可选的default分支,每个分支后需加break以防止“穿透”。

基本语法
switch (表达式) {
case 值1:
// 当表达式等于值1时执行
break;
case 值2:
// 当表达式等于值2时执行
break;
default:
// 都不匹配时执行
break;
}
AI写代码
java
运行

完整示例
以下代码演示了根据数字输出星期几:

public class SwitchDemo {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println(“星期一”);
break;
case 2:
System.out.println(“星期二”);
break;
case 3:
System.out.println(“星期三”);
break;
case 4:
System.out.println(“星期四”);
break;
case 5:
System.out.println(“星期五”);
break;
case 6:
System.out.println(“星期六”);
break;
case 7:
System.out.println(“星期日”);
break;
default:
System.out.println(“输入错误,请输入1-7”);
break;
}
}
}
AI写代码
java
运行

运行结果:当day = 3时,输出星期三。
注意:break语句是必须的,否则会继续执行后续case分支。
3. if vs switch:使用建议
使用if的情况:当条件涉及范围比较(如分数区间)、复杂布尔逻辑或非离散值时。例如,if (score >= 90)适合用if。
使用switch的情况:当基于单个表达式的离散值匹配时(如枚举、整数或字符串)。例如,switch (day)适合用switch。
性能:在Java中,switch通常编译为更高效的跳转表,适合大量case分支;if更灵活但可能稍慢。
最佳实践:确保代码可读性,避免嵌套过深。如果需要处理多个相关条件,优先考虑switch。

注意: 在Java中,switch语句如果没有使用break关键字,会导致“fall-through”(穿透)行为,即匹配到一个case后,会继续执行后续所有case中的代码,直到遇到break或switch结束。的代码示例。

代码演示(没有break的情况)
int num = 2;
switch (num) {
case 1:
System.out.print(“A”);
case 2:
System.out.print(“B”); // 执行这个
case 3:
System.out.print(“C”); // 还会继续执行这个!
case 4:
System.out.print(“D”); // 还会继续执行这个!
}
AI写代码
java
运行

行为解释
变量初始化:num被赋值为2。
switch匹配:由于num的值是2,程序会匹配到case 2。
执行并fall-through:
首先执行case 2中的语句,打印”B”。
由于没有break语句,程序不会退出switch,而是继续执行后续case(case 3和case 4),打印”C”和”D”。
输出结果:最终输出是”BCD”,因为打印操作依次是”B”、”C”、”D”。
输出验证
运行此代码,控制台输出结果为:
BCD

建议
在实际编程中,为了避免意外行为,通常在每个case后添加break语句来终止执行。例如:

switch (num) {
case 1:
System.out.print(“A”);
break; // 添加break以退出switch
// …其他case类似
}
AI写代码
java
运行
这样可以确保只执行匹配的case代码块。

3.2 循环语句

for循环
for循环适用于已知迭代次数的场景,包含初始化、循环条件和更新三部分。

// 语法格式
for (初始化; 循环条件; 更新) {
// 循环体
}

// 示例:打印1到10
for (int i = 1; i <= 10; i++) {
System.out.print(i + “ “);
}
// 输出:1 2 3 4 5 6 7 8 9 10
AI写代码
java
运行

while循环
while循环在条件为真时重复执行代码块,适合不确定迭代次数的情况。

// 语法格式
while (循环条件) {
// 循环体
}

// 示例:打印1到10
int i = 1;
while (i <= 10) {
System.out.print(i + “ “);
i++;
}
AI写代码
java
运行

do-while循环(至少执行一次)
do-while循环先执行一次循环体,再检查条件,确保代码块至少运行一次。

// 语法格式
do {
// 循环体(至少执行一次)
} while (循环条件);

// 示例:打印1到10
int i = 1;
do {
System.out.print(i + “ “);
i++;
} while (i <= 10);
AI写代码
java
运行

三种循环的区别

循环类型 执行特点 适用场景
for 先判断,后执行 知道循环次数
while 先判断,后执行 不知道循环次数
do-while 先执行,后判断 至少执行一次
3.3 跳转语句

语句 作用
break 用于循环或switch结构中,立即退出当前结构。
continue 跳过本次循环剩余代码,进入下一次循环
return 在方法或函数中,终止执行并可选返回一个值;如果无返回值,则单纯结束方法。

  1. break关键字的作用
    break用于立即终止整个循环,跳出循环体。当满足特定条件时,循环会提前结束,不再执行后续迭代。

代码示例
// break示例:遇到7就停止
for (int i = 1; i <= 10; i++) {
if (i == 7) {
break; // 循环到7就结束
}
System.out.print(i + “ “);
}
// 输出:1 2 3 4 5 6
AI写代码
java
运行
解释
循环从1迭代到10。
当i等于7时,break语句被执行,整个循环立即终止。
因此,输出只显示1到6,而7及之后的数字未被打印。
2. continue关键字的作用
continue用于跳过当前迭代的剩余代码,直接进入下一次迭代。循环不会终止,而是继续执行后续的迭代。

代码示例
// continue示例:跳过7
for (int i = 1; i <= 10; i++) {
if (i == 7) {
continue; // 跳过7,继续后面的
}
System.out.print(i + “ “);
}
// 输出:1 2 3 4 5 6 8 9 10
AI写代码
java
运行
解释
循环从1迭代到10。
当i等于7时,continue语句被执行,跳过本次迭代的打印操作。
循环继续执行,输出1到6和8到10,唯独跳过7。
3. break与continue的对比
关键字 行为 适用场景
break 立即终止整个循环 当检测到满足退出条件(如找到目标值)时
continue 跳过当前迭代,继续下一次迭代 当需要忽略某些特定值(如无效输入)时
核心区别
break:完全退出循环,适用于提前结束任务。
continue:仅跳过当前步骤,适用于过滤部分数据。
四、代码示例

示例1:判断闰年
此代码通过条件判断年份是否为闰年。规则为:年份能被4整除但不能被100整除,或者能被400整除。

public class LeapYear {
public static void main(String[] args) {
int year = 2024;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
System.out.println(year + “年是闰年”);
} else {
System.out.println(year + “年是平年”);
}
}
}
AI写代码
java
运行

示例2:简单的计算器
此代码实现一个基本计算器,支持加、减、乘、除操作。除法时检查除数是否为0,避免错误。

public class Calculator {
public static void main(String[] args) {
double a = 10;
double b = 3;
char operator = ‘/‘;
double result;

switch (operator) {
  case '+':
    result = a + b;
    break;
  case '-':
    result = a - b;
    break;
  case '*':
    result = a * b;
    break;
  case '/':
    if (b != 0) {
      result = a / b;
    } else {
      System.out.println("除数不能为0!");
      return;
    }
    break;
  default:
    System.out.println("不支持的运算符");
    return;
}
System.out.println(a + " " + operator + " " + b + " = " + result);

}
}
AI写代码
java
运行

示例3:打印九九乘法表
此代码使用嵌套循环打印九九乘法表,输出格式整齐。

public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + “×” + i + “=” + (i * j) + “\t”);
}
System.out.println(); // 换行
}
}
}
// 输出:标准的九九乘法表
AI写代码
java
运行

示例4:计算1到100的和
此代码演示三种方式计算1到100的和:for循环、while循环和数学公式验证。公式:和 𝑆=(首项+末项)×÷2,首项 𝑎1=1,末项 𝑎𝑛=100,项数 𝑛=100。

public class SumExample {
public static void main(String[] args) {
// for循环实现
int sum1 = 0;
for (int i = 1; i <= 100; i++) {
sum1 += i;
}
System.out.println(“for循环结果:” + sum1);

// while循环实现
int sum2 = 0;
int j = 1;
while (j <= 100) {
  sum2 += j;
  j++;
}
System.out.println("while循环结果:" + sum2);

// 数学公式验证:和 = (首项+末项)×项数÷2 = (1+100)×100÷2 = 5050
System.out.println("验证结果:5050");

}
}
AI写代码
java
运行

五、常见错误与注意点

错误写法 正确写法 说明
if (a = 5) if (a == 5) 判断相等用==,单等号是赋值
switch (x) { case 1.5: } case后面必须是整数、字符或枚举常量 switch不支持小数
for (int i=0; i<10; i++); 去掉分号 分号会让循环体变成空语句
while (true); 确保有break或条件是假的 会变成死循环
5 / 2 期望得2.5 5.0 / 2 或 5 / 2.0 整数除法会丢失小数
忘记写break 写上break 会导致switch穿透
六、小结

今天学会了:

  • 各种运算符的使用(算术、关系、逻辑、赋值、位运算)
  • 运算符优先级和instanceof运算符
  • if-else分支结构
  • switch语句及穿透现象
  • 三种循环(for、while、do-while)
  • break、continue、return跳转语句

核心要点:

  1. =是赋值,==是判断相等
  2. &&||有短路特性
  3. switch中忘记break会导致穿透
  4. 整数除法会丢失小数部分
  5. 循环变量要确保能退出循环,避免死循环

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2026 Shipanxs
  • 访问人数: | 浏览次数:

如果这篇文章对你有帮助,可以请我喝杯茶

支付宝

支付宝扫一扫