文章目录
今日学习目标

1. 复习集合框架
1.1 List、Set 和 Map 的基本使用
(1)List(有序、可重复)
- 主要实现类:ArrayList、LinkedList
- 特点:
- 允许存储重复元素
- 保持插入顺序
- 可以通过索引访问元素
- 常见操作:
List<String> list = new ArrayList<>();
list.add("Alice");
list.add("Bob");
list.add("Alice"); // 允许重复元素
list.remove("Bob");
System.out.println(list.contains("Alice")); // true
for (String name : list) {
System.out.println(name);
}
(2)Set(无序、不重复)
- 主要实现类:HashSet(无序)、TreeSet(有序)
- 特点:
- 不允许存储重复元素
- TreeSet 默认按自然顺序排序
- 常见操作:
Set<String> set = new HashSet<>();
set.add("Alice");
set.add("Bob");
set.add("Alice"); // 不会重复
System.out.println(set.contains("Alice")); // true
for (String name : set) {
System.out.println(name);
}
(3)Map(键值对存储)
- 主要实现类:HashMap(无序)、TreeMap(有序)
- 特点:
- HashMap 允许 null 作为键
- TreeMap 会对键自动排序
- 常见操作:
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 90);
map.put("Bob", 85);
map.put("Charlie", 92);
System.out.println(map.get("Alice")); // 90
map.remove("Bob");
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
1.2 对比 List、Set 和 Map
特性 | List | Set | Map |
---|---|---|---|
是否允许重复元素 | 允许 | 不允许 | 仅键唯一,值可重复 |
是否有序 | 按插入顺序 | HashSet : 无序 |
HashMap : 无序 |
TreeSet: 自然排序 |
TreeMap : 按键排序 |
||
适用场景 | 需要索引访问、存储有序数据 | 需要去重的数据存储 | 需要存储键值对数据、 |
2. 复习异常处理
2.1 try-catch 语句
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("发生除零错误:" + e.getMessage());
}
分析:
代码执行流程
1)进入 try
块
- 代码尝试执行
10 / 0
。 - 由于
0
不能作为除数,Java 在运行时会抛出ArithmeticException
。
2)异常抛出
10 / 0
违反了数学运算规则,因此抛出ArithmeticException
,异常信息为:by zero
。
3)进入 catch
块
catch (ArithmeticException e)
捕获到ArithmeticException
,程序不会直接崩溃,而是执行catch
内部代码。
4)输出错误信息
e.getMessage()
返回异常的详细信息(/ by zero
)。System.out.println("发生除零错误:" + e.getMessage());
的输出结果为:
发生除零错误:/ by zero
2.2 throws 关键字
public void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
}
代码执行流程
1)方法声明readFile(String fileName)
:一个公共方法,接收文件名作为参数。throws IOException
:声明该方法可能抛出IOException
异常,调用此方法时,调用者必须处理这个异常。
2)文件读取FileReader file = new FileReader(fileName);
试图打开fileName
指定的文件进行读取。如果文件存在且可读,则
FileReader
正常创建。如果文件不存在、无权限访问或出现 I/O 错误,则
FileReader
抛出IOException
,方法执行中断。
2.3 自定义异常
class InvalidScoreException extends Exception {
public InvalidScoreException(String message) {
super(message);
}
}
public class Test {
public static void checkScore(int score) throws InvalidScoreException {
if (score < 0 || score > 100) {
throw new InvalidScoreException("成绩必须在 0 到 100 之间");
}
}
}
代码执行流程
步骤 | 操作 |
---|---|
1 | 调用 checkScore(105),105 > 100,触发 throw new InvalidScoreException(“成绩必须在 0 到 100 之间”) |
2 | InvalidScoreException 被抛出,程序终止执行该方法 |
3 | 调用者需要 捕获异常(try-catch) 或 继续声明 throws |
作用
InvalidScoreException
(自定义异常)- 继承
Exception
,表示它是一个 已检查异常(Checked Exception)。 - 通过
super(message)
传递错误信息,方便在异常发生时输出具体信息。
- 继承
checkScore(int score)
方法- 接收一个整数
score
(成绩)。 - 如果成绩小于 0 或大于 100,则抛出
InvalidScoreException
,表示成绩不合法。 - 由于
throws InvalidScoreException
,调用checkScore()
时 必须 处理异常(try-catch
)或继续throws
传递。
- 接收一个整数
3. 实践项目:学生管理系统
功能需求
- 使用 HashMap<String, Integer> 存储学生的姓名和成绩。
- 允许用户输入学生姓名和成绩,并存入 HashMap。
- 如果用户输入无效成绩(如负数或大于 100),则抛出 InvalidScoreException 并处理。
- 允许用户查询学生成绩。
3.1 代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
// 自定义异常
class InvalidScoreException extends Exception {
public InvalidScoreException(String message) {
super(message);
}
}
public class StudentManager {
private static Map<String, Integer> studentMap = new HashMap<>();
private static Scanner scanner = new Scanner(System.in);
// 添加学生信息
public static void addStudent(String name, int score) throws InvalidScoreException {
if (score < 0 || score > 100) {
throw new InvalidScoreException("成绩必须在 0 到 100 之间!");
}
studentMap.put(name, score);
System.out.println("学生 " + name + " 添加成功,成绩:" + score);
}
// 查询学生成绩
public static void getStudentScore(String name) {
if (studentMap.containsKey(name)) {
System.out.println(name + " 的成绩是:" + studentMap.get(name));
} else {
System.out.println("学生 " + name + " 不存在!");
}
}
public static void main(String[] args) {
while (true) {
System.out.println("\n1. 添加学生信息\n2. 查询学生成绩\n3. 退出");
System.out.print("请选择操作:");
int choice = scanner.nextInt();
scanner.nextLine(); // 清除换行符
if (choice == 1) {
try {
System.out.print("请输入学生姓名:");
String name = scanner.nextLine();
System.out.print("请输入学生成绩:");
int score = scanner.nextInt();
scanner.nextLine();
addStudent(name, score);
} catch (InvalidScoreException e) {
System.out.println("输入错误:" + e.getMessage());
} catch (Exception e) {
System.out.println("输入无效,请重试!");
}
} else if (choice == 2) {
System.out.print("请输入要查询的学生姓名:");
String name = scanner.nextLine();
getStudentScore(name);
} else if (choice == 3) {
System.out.println("退出系统!");
break;
} else {
System.out.println("无效选项,请重新选择!");
}
}
}
}
3.2 运行示例
1. 添加学生信息
2. 查询学生成绩
3. 退出
请选择操作:1
请输入学生姓名:Alice
请输入学生成绩:95
学生 Alice 添加成功,成绩:95
1. 添加学生信息
2. 查询学生成绩
3. 退出
请选择操作:1
请输入学生姓名:Bob
请输入学生成绩:110
输入错误:成绩必须在 0 到 100 之间!
1. 添加学生信息
2. 查询学生成绩
3. 退出
请选择操作:2
请输入要查询的学生姓名:Alice
Alice 的成绩是:95
4. 总结
4.1 集合框架
集合类型 | 主要实现类 | 特点 |
---|---|---|
List | ArrayList 、LinkedLis t |
允许重复元素,按插入顺序存储 |
Set | HashSet 、TreeSet |
不允许重复元素,TreeSet 具有排序功能 |
Map | HashMap 、TreeMap |
键唯一,值可重复,TreeMap 键自动排序 |
4.2 异常处理
异常类型 | 说明 | 处理方式 |
---|---|---|
try-catch |
捕获并处理异常 | 用于处理运行时异常 |
throws |
声明异常 | 用于方法可能抛出的异常 |
自定义异常 | 继承 Exception 或 RuntimeException |
用于特定业务逻辑 |
5. 今日生词
1.audio 2.packages 3.inspector 4.effects 5.models