流程控制能让程序根据不同情况执行不同逻辑,方法用于封装代码实现复用,数组则方便我们存储和操作一组同类型数据。下面聚焦这些重点内容展开。

一、流程控制:分支与循环
(一)Switch 分支判断
switch 语句用于多分支选择,它会根据表达式的值,匹配对应的 case 分支执行。基本语法如下:
switch (表达式) {
case 值 1:
// 当表达式值等于值 1 时执行的代码
break;
case 值 2:
// 当表达式值等于值 2 时执行的代码
break;
// 更多 case 分支
default:
// 当表达式值不匹配任何 case 时执行的代码
}
需要注意的是,switch 表达式的类型在 Java 5 及以前只能是 byte、short、char、int;Java 7 开始支持 String 类型;Java 14 及以后还支持 enum(枚举)和 sealed 类型等。另外,break 用于跳出 switch 语句,如果没有 break,会发生 “穿透” 现象,即匹配到某个 case 后,会继续执行后面所有 case 的代码,直到遇到 break 或者 switch 结束。“穿透” 特性在某些场景下可以利用,比如多个 case 需要执行相同代码时。例如,根据星期几判断是否为工作日:
String day = "Monday";
switch (day) {
case "Monday":
case "Tuesday":
case "Wednesday":
case "Thursday":
case "Friday":
System.out.println(day + " 是工作日");
break;
case "Saturday":
case "Sunday":
System.out.println(day + " 是休息日");
break;
default:
System.out.println("输入的星期不合法");
}
再比如,使用 enum 类型的 switch 示例:
enum Season { SPRING, SUMMER, AUTUMN, WINTER }
Season season = Season.SUMMER;
switch (season) {
case SPRING:
System.out.println("春天,万物复苏");
break;
case SUMMER:
System.out.println("夏天,烈日炎炎");
break;
case AUTUMN:
System.out.println("秋天,硕果累累");
break;
case WINTER:
System.out.println("冬天,白雪皑皑");
break;
}
(二)do - while 循环
do - while 循环的特点是先执行循环体,再判断循环条件,也就是说,循环体至少会执行一次。这和 while 循环(先判断条件,再执行循环体)有所不同,while 循环有可能一次都不执行循环体。do - while 适合那些无论如何都要先执行一次操作的场景,比如用户输入验证,至少要让用户输入一次,再判断输入是否合法。语法格式为:
do {
// 循环体代码
} while (循环条件);
比如,实现一个简单的数字累加,至少执行一次累加操作:
int i = 0;
int sum = 0;
do {
sum += i;
i++;
} while (i <= 10);
System.out.println("1 到 10 的和为:" + sum); // 输出:55
再比如,用户输入密码,直到输入正确为止:
Scanner scanner = new Scanner(System.in);
String correctPassword = "123456";
String inputPassword;
do {
System.out.print("请输入密码:");
inputPassword = scanner.nextLine();
} while (!inputPassword.equals(correctPassword));
System.out.println("密码输入正确!");
scanner.close();
二、函数(方法):封装与复用
(一)static 关键字修饰方法
被 static 修饰的方法是静态方法,静态方法属于类,而不是类的实例(对象)。我们可以通过 “类名。静态方法名” 的方式直接调用静态方法,无需创建类的对象。静态方法通常用于定义工具方法,这些方法不依赖于对象的状态,只进行一些通用的操作。例如:
public class MathUtil {
// 静态方法,计算两个数的和
public static int add(int a, int b) {
return a + b;
}
// 静态方法,计算一个数的平方
public static int square(int num) {
return num * num;
}
}
// 在其他类中调用
public class Test {
public static void main(String[] args) {
// 直接通过类名调用静态方法 add
int sumResult = MathUtil.add(3, 5);
System.out.println("3 + 5 = " + sumResult); // 输出:3 + 5 = 8
// 调用静态方法 square
int squareResult = MathUtil.square(4);
System.out.println("4 的平方是:" + squareResult); // 输出:4 的平方是:16
}
}
需要注意的是,静态方法中不能直接访问非静态成员(非静态变量和非静态方法),因为非静态成员属于对象,而静态方法在类加载时就存在,可能此时还没有创建对象。
三、数组:批量处理同类型数据
(二)二维数组
二维数组可以理解为 “数组的数组”,用于存储表格型数据(比如矩阵)。它的声明、初始化方式有多种,这里介绍常见的两种:
- 动态初始化:
// 声明一个二维 int 数组,有 2 行,每行的列数后续确定
int[][] arr = new int[2][];
// 为第一行分配 3 列的空间
arr[0] = new int[3];
// 为第二行分配 2 列的空间
arr[1] = new int[2];
// 给数组元素赋值
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
- 静态初始化:
// 直接初始化一个二维数组,包含两行三列的数据
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
访问二维数组的元素时,通过 “数组名 [行索引][列索引]” 的方式,比如 arr[0][1] 表示访问第一行第二列的元素(值为 2)。遍历二维数组通常需要使用嵌套循环,外层循环控制行,内层循环控制列,例如:
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
运行上述代码,输出结果为:
1 2 3
4 5 6
二维数组还可以用于更复杂的场景,比如存储学生的多门课程成绩,每行代表一个学生,每列代表一门课程的成绩,方便进行成绩的统计(如计算每个学生的总分、平均分,每门课程的平均分等)。例如:
// 学生成绩数组,每行是一个学生的语文、数学、英语成绩
int[][] scores = {{85, 90, 92}, {78, 88, 80}, {95, 92, 98}};
// 计算每个学生的总分
for (int i = 0; i < scores.length; i++) {
int total = 0;
for (int j = 0; j < scores[i].length; j++) {
total += scores[i][j];
}
System.out.println("学生 " + (i + 1) + " 的总分是:" + total);
}
3073

被折叠的 条评论
为什么被折叠?



