Java 的 HashMap 靠 hashCode 和 equals 查找键,约定被破坏或键在 put 之后被修改,条目就会“消失”。本文讲清这些规则、TreeSet 为什么改用 compareTo,以及该选哪种集合。
Java 把异常分成两类:编译器强制你处理的受检异常,和不强制的非受检异常。学会 try、catch 和 finally,学会恰当地抛出和包装异常,再看 try-with-resources 如何按相反顺序关闭资源。
密封类型给 Java 一份封闭的子类型清单,模式匹配让 switch 逐个检查并拆开每一种子类型。两者结合,漏掉的 case 会变成编译错误,而不是悄无声息的 bug。
接口说明一个类型能做什么,继承把父类的一切交给子类,组合则把另一个对象包装起来。通过运行小程序,学会默认方法、super、抽象类,并看清脆弱基类陷阱。
Java record 用一行声明一个不可变的小数据类,编译器替你写好构造器、访问器、equals、hashCode 和 toString。看看 record 给了你什么、拒绝做什么,又在哪里力不从心。
Java 字符串创建后就不会再变,每次“修改”都会生成新字符串。本文讲 String 常用方法及其陷阱、循环里的 += 为什么要复制全部内容、StringBuilder、文本块、Unicode,以及数组和 Arrays 工具类。
Java 类描述对象持有哪些数据、能做什么,构造器决定每个对象怎样开始。通过运行小程序,学会字段、this、构造器、private、static 和 final。
Java 的 if 和循环看起来和 C 一样,但有几条规则能拦住真实的 bug。旧 switch 默认会贯穿,switch 表达式修掉了这个问题,还让编译器检查每个枚举值。
Java 变量里存的要么是基本类型的值,要么是指向对象的引用。分清这一点,就能看懂静默溢出、按值传递、== 与 equals 的区别,以及两个存着 128 的 Integer 为什么不相等。
Java 25 只需一条命令和一个光秃秃的 void main 就能运行单个源文件,不用先写类。了解 JDK 里有什么、为什么选 Java 25,以及怎样读懂编译错误和异常。