Java 核心知识点总结
一、异常(Exception)
1. 基本概念
- 异常:代表程序在运行过程中可能出现的问题。
- Exception :包含运行时异常 和编译时异常(受检异常)。
- try-catch:用于捕获并处理异常。
java
try {
// 可能抛出异常的代码
} catch (Exception e) {
// 异常处理逻辑
}
- 支持自定义异常,用于表达业务层面的错误信息。
2. 异常处理方案
| 方案 | 说明 |
|---|---|
| 层层上抛,最外层捕获 | 底层异常逐层向上抛出,在最外层统一捕获;记录完整异常信息,并向用户返回友好、可理解的提示 |
| 捕获后尝试修复 | 最外层捕获异常后,尝试自动修复或降级处理,保证程序尽可能继续运行 |
二、泛型(Generics)
1. 泛型类
java
修饰符 class 类名<类型变量, 类型变量, ...> { }
- 类型变量建议使用大写英文字母 ,常用:
E、T、K、V等。
2. 泛型接口
接口同样可以使用类型参数,写法与泛型类类似。
3. 泛型方法
java
修饰符 <类型变量, 类型变量, ...> 返回值类型 方法名(形参列表) { }
4. 通配符 ?
?在使用泛型时代表任意类型。E、T、K、V用于定义 泛型;?用于使用泛型时的通配。
5. 泛型上下限
| 写法 | 含义 |
|---|---|
? extends Car |
上限 :? 能接收的必须是 Car 或其子类 |
? super Car |
下限 :? 能接收的必须是 Car 或其父类 |
6. 泛型擦除
- 泛型仅在编译阶段生效。
- 编译完成后,泛型信息会被擦除,运行时不再保留具体类型参数。
三、并发修改异常(ConcurrentModificationException)
在遍历集合的同时进行增删操作,可能触发并发修改异常。
解决方案
-
普通 for 循环(支持索引的集合)
- 每删除一个元素后执行
i--; - 或倒序遍历后再删除。
- 每删除一个元素后执行
-
迭代器(Iterator)
- 使用迭代器遍历,并调用迭代器提供的
remove()方法删除元素。
- 使用迭代器遍历,并调用迭代器提供的
注意
- 增强 for 循环 (for-each)和 Lambda 遍历不能解决并发修改异常问题。
- 它们只适合纯遍历,不适合在遍历时同时做增删操作。
四、ArrayList 与 LinkedList
ArrayList
| 特性 | 说明 |
|---|---|
| 底层结构 | 数组 |
| 默认容量 | 10 |
| 扩容规则 | 第一次增加元素时,扩容到 15 |
| 查询效率 | 高(随机访问快) |
| 使用场景 | 使用最多,内存占用相对较小 |
LinkedList
| 特性 | 说明 |
|---|---|
| 底层结构 | 链表 |
| 增删效率 | 在已知位置增删较快 |
| 查询效率 | 相对较低(需按节点遍历) |
对比小结
- ArrayList:基于数组,查询快,适合读多写少的场景。
- LinkedList:基于链表,适合频繁在头尾或已知节点位置增删的场景。