第22章 Java 基础技术回顾:21 章精华速览

发布时间:2026/8/29 5:11:46
第22章 Java 基础技术回顾:21 章精华速览 第22章 Java 基础技术回顾21 章精华速览从Hello World到学生信息管理系统Java 基础入门系列 21 章已经全部讲完。这一章不教新知识而是把 21 章的内容串成一条线做一次系统回顾。把这一章的每一条都看懂你的 Java 基础就算真正过关了。本系列按 JDK 8、JDK 11、JDK 17 三个 LTS 版本讲解三个版本的基础语法完全一致只有文中特别标注如 switch 箭头写法、record、sealed、文本块的特性需要 JDK 17。一、语法地基从环境搭建到方法第 1~8 章1. 开发环境与第一个程序Java 跨平台的秘密是JVM一次编译到处运行开发用JDK含编译器 javac运行只需要JRE三步走写代码 →javac编译 →java运行程序结构固定类名与文件名一致入口是public static void main(String[] args)publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello Java);// println 换行、print 不换行、printf 格式化}}2. 变量与数据类型8 种基本类型byte、short、int、long、float、double、char、boolean整数默认int小数默认doublelong加 Lfloat加 F基本类型存值引用类型存地址——这是理解 Java 一切内存话题的起点小转大自动转换大转小强制转换可能丢精度金额计算用BigDecimal包装类比较内容用equals不用3. 运算符整数除法取整、%取余判断奇偶、取某位数字很好用比较基本类型的值引用类型比较内容一律用equals、||有短路特性判空场景非常好用4. 流程控制if适合范围判断switch适合固定值判断经典 switch 别忘了breakJDK 17 的-写法自动 breakfor次数确定、while次数不确定、do-while至少执行一次break结束循环、continue跳过本次、return结束方法循环三件事想清楚变量初始化、条件边界还是、变量更新避免死循环5. 数组长度固定、下标从 0 开始、越界抛ArrayIndexOutOfBoundsException只读遍历用 foreach需要下标或改元素用普通 forArrays工具类sort、binarySearch、toString、copyOf二维数组是数组的数组每行可独立、可不等长6. 方法定义、重载与递归方法封装重复逻辑定义一次调用多次Java 是值传递形参永远拿到实参的拷贝引用类型通过拷贝的地址可以改对象内容重载 同名不同参数列表与返回值无关精确匹配优先可变参数本质是数组必须放参数列表最后递归必须有出口警惕栈溢出能用循环改写就优先用循环二、面向对象四大核心第 9~13 章7. 类与对象类是模板对象是实例new创建对象引用变量存堆中对象的地址属性描述状态方法描述行为成员变量有默认值局部变量必须初始化构造器与类同名、无返回值、new时自动调用this指当前对象static属于类、全类共享一份静态方法不能直接访问实例成员对象数组要先 new 数组再逐个 new 元素否则空指针8. 封装与访问控制封装 private属性 公开 getter/setter方法内校验数据合法性访问级别从宽到窄public→protected→ 默认 →private最小暴露JavaBean public 类 private 属性 getter/setter 无参构造器是框架协作的基础属性一律 private读写走 getter/setter——封装的核心习惯9. 继承extends复用父类非私有成员单继承、可多层继承一切类继承自Object重写Override签名一致、权限不缩水建议加Overridesuper访问父类成员/构造器构造器先父后子super()必须第一行equals与hashCode要成对重写10. 多态多态 父类/接口引用指向子类对象 方法重写运行时看实际对象调方法动态绑定编译期看引用类型向上转型自动安全向下转型必须先instanceof判断否则抛ClassCastException一句话多态是实例方法的特权变量和静态方法不参与动态绑定11. 抽象类与接口抽象方法只有声明没有实现含抽象方法的类必须声明为抽象类不能new接口是纯规范方法默认public abstract变量默认public static final一个类可实现多个接口抽象类描述是什么接口描述能做什么优先用接口JDK 8 起接口支持default和static方法JDK 17 可用sealed限定继承名单模板方法模式抽象类定骨架final 模板方法 钩子方法子类填细节三、常用类与集合第 14~18 章12. String 与 StringBuilder字面量存常量池可复用new一定新对象内容比较用equalsString 不可变 → 线程安全、可缓存哈希但拼接慢循环拼接用StringBuilder单线程或StringBuffer多线程常量字符串放equals左边防空指针判空先判 nullJDK 11 新增isBlank、strip、repeat、lines等便捷方法13. 异常处理Throwable之下分Error不可处理和Exception可处理运行时异常是代码 bug不强制处理检查型异常必须 try-catch 或 throwsfinally收尾先于 return 执行但别在 finally 里 returntry-with-resources 自动关闭资源throw主动抛出throws声明抛出业务错误可自定义异常继承 RuntimeException最佳实践捕获具体异常、不空 catch、记录日志、资源必关14. 集合框架List 与 SetList 有序可重复ArrayList查询快 /LinkedList增删快Set 不可重复HashSet无序 /LinkedHashSet保序 /TreeSet排序自定义类进 HashSet 必须重写hashCodeequals遍历集合别在增强 for 中修改删除用Iterator.remove()或倒序 forArrayList 自动扩容默认容量 101.5 倍增长JDK 11/17 的List.of不可变15. 集合框架Map增删改查put/get/remove/containsKey遍历推荐entrySet或forEach避免 keySet get 二次查询HashMap 底层是数组链表红黑树查询 O(1)put/get 靠 hash 定位、equals 找键自定义类当 key 必须重写 hashCode equals且 key 不要被修改多线程用ConcurrentHashMapJDK 11/17 的Map.of不可变、不能 null16. 泛型入门泛型限定集合/类的类型编译期检查免强转泛型类class BoxT、泛型方法T 返回类型 方法名、泛型接口? extends T上限偏读? super T下限偏写PECS 记读写方向泛型运行期擦除不能new T()、不能建泛型数组、不能instanceof T基本类型用包装类static 成员不能用类泛型要用泛型方法四、IO 与多线程第 19~20 章17. IO 流流是数据传输通道输入/输出相对程序而言字节流管一切文件字符流管文本缓冲流内部有大缓冲区批量读写性能高字符流要 close或 flush才会真正落盘复制文件缓冲数组 循环 read/write注意write(buffer, 0, len)只写有效长度编码统一 UTF-8大文件别用readAllBytes一次性读进内存用 try-with-resources 自动关闭资源18. 多线程入门进程是资源分配单位线程是 CPU 调度单位线程共享进程内存创建线程继承 Thread / 实现 Runnable推荐/ LambdaJDK 8start()开新线程且只能调一次run()只是普通方法调用生命周期新建 → 就绪 → 运行 → 阻塞/等待 → 死亡多线程共享数据有安全风险count不是原子操作用synchronized加锁或用原子类/并发容器sleep不释放锁wait释放锁必须在 synchronized 内靠 notify 唤醒五、综合实战第 21 章第 21 章用学生信息管理系统把前面所有知识串起来类设计Student封装属性getter/setter、StudentService增删改查逻辑、主程序菜单交互集合用 ArrayList 存学生数据IO文件读写实现数据持久化保存到文件、启动时加载流程控制while 菜单循环 switch 功能分支易错点nextInt后要补nextLine()吃掉换行符数据变更后及时持久化能不看答案独立写出这个项目说明 Java 基础已经过关。六、核心知识图谱文字版Java 基础 ├── 语法地基变量/运算符/流程控制/数组/方法 ├── 面向对象类与对象 → 封装 → 继承 → 多态 → 抽象类与接口 ├── 常用 APIString / 异常 / 集合(List、Set、Map) / 泛型 ├── 进阶基础IO 流 / 多线程 └── 综合实战学生信息管理系统贯穿始终的一条主线“基本类型存值、引用类型存地址”它解释了 equals vs 、深浅拷贝、集合去重hashCodeequals、Map 查找原理、值传递等一大片问题。七、高频易错点清单比较字符串内容 → 错用equals数组越界、new对象数组后忘了 new 元素 → 空指针重载与重写混淆重载换参数、重写换实现switch 忘写 break旧写法在增强 for 里删除集合元素 → 用 Iterator.remove()自定义类进 HashSet/HashMap 不重写 hashCodeequalsfinally 里 return 吞掉异常/返回值字符流不 close 数据丢失读文件乱码编码不一致count多线程不安全nextInt 后直接 nextLine 读到空串八、下一步Java 高级用法系列基础篇到此收官。接下来是《Java 高级用法》系列继续深入原理和为什么深入 String常量池、intern 与不可变集合框架深度HashMap 源码与并发集合IO 流深入与序列化网络编程Socket 与 HTTP多线程进阶线程池与锁JVM内存与垃圾回收、性能调优JDK 新特性8/11/17 的 Lambda、Stream、var、语法糖反射、注解、泛型深入、设计模式、并发实战……基础打牢进阶不慌。下一站见下一篇Java 高级用法系列 第1章 深入 String常量池、intern 与不可变