Java 基础知识体系概览
什么是 Java?
Java 是一门面向对象的、跨平台的、强类型编程语言,由 Sun Microsystems 于 1995 年发布(现归 Oracle 所有)。Java 的核心理念是 "Write Once, Run Anywhere"(WORA)——编写一次,到处运行。
这是如何实现的?Java 代码编译后不直接生成机器码,而是生成一种中间形式——字节码(Bytecode),然后运行在 JVM(Java 虚拟机) 之上。不同操作系统有不同的 JVM 实现,但字节码是通用的,所以同一份 Java 程序可以在 Windows、Linux、macOS 上运行。
为什么 Java 这么重要?
Java 连续 20+ 年位居编程语言排行榜前列,是企业级后端开发的首选语言之一:
| 领域 | 说明 |
|---|---|
| 企业后端 | 绝大多数银行、保险、电信系统用 Java 开发 |
| 互联网后端 | 阿里、美团、京东、字节等大厂的核心服务用 Java/Spring |
| Android 开发 | Android 原生开发的主要语言(现与 Kotlin 并存) |
| 大数据 | Hadoop、Spark、Flink 等大数据框架用 Java/Scala 编写 |
| 就业市场 | Java 岗位数量长期位居各语言前列 |
核心知识点
数据类型——Java 的"基本单元"
Java 是强类型语言——每个变量必须先声明类型才能使用。Java 有 8 种基本类型(Primitive Types):
| 类型 | 大小 | 范围 | 默认值 |
|---|---|---|---|
byte | 1 字节 | -128 ~ 127 | 0 |
short | 2 字节 | -32768 ~ 32767 | 0 |
int | 4 字节 | 约 ±21 亿 | 0 |
long | 8 字节 | 约 ±922 京 | 0L |
float | 4 字节 | 约 ±3.4e38 | 0.0f |
double | 8 字节 | 约 ±1.8e308 | 0.0d |
char | 2 字节 | Unicode 字符 | '\u0000' |
boolean | - | true/false | false |
基本类型都有对应的包装类(int → Integer、boolean → Boolean),Java 5 引入的自动装箱/拆箱(Autoboxing) 让两者可以自动转换。一个经典面试题:Integer.valueOf(127) == Integer.valueOf(127) 为 true(缓存池),而 Integer.valueOf(128) == Integer.valueOf(128) 为 false。
面向对象——Java 的核心思想
Java 是纯面向对象语言(除基本类型外,一切皆对象)。面向对象三大特征:
- 封装(Encapsulation):用
private/protected/public控制访问权限,隐藏内部实现细节 - 继承(Inheritance):子类继承父类的属性和方法,用
extends关键字(Java 只支持单继承) - 多态(Polymorphism):父类引用指向子类对象,运行时调用子类的方法实现
抽象类 vs 接口是 Java 面试的经典问题:抽象类用 abstract class,可以有构造方法和实例变量;接口用 interface,Java 8 后可以有 default 方法。一个类只能继承一个抽象类,但可以实现多个接口。
String——最特殊的"对象"
String 在 Java 中是不可变对象(Immutable)——一旦创建就不能修改。每次拼接字符串实际上都在创建新的 String 对象。String 有一个字符串常量池(String Pool),"abc" 和 "abc" 指向池中的同一个对象,所以 "abc" == "abc" 为 true。
频繁拼接字符串应使用 StringBuilder(线程不安全但快)或 StringBuffer(线程安全但慢)。
异常处理——程序的"安全网"
Java 用 try-catch-finally 处理异常。异常体系的根是 Throwable,分为两大类:
- Error:严重错误(如
OutOfMemoryError),程序无法恢复 - Exception:可处理的异常,又分为:
- Checked Exception(受检异常):必须用
try-catch或throws处理(如IOException) - Unchecked Exception(非受检异常):
RuntimeException及其子类(如NullPointerException),不强制处理
- Checked Exception(受检异常):必须用
Java 7 引入的 try-with-resources 可以自动关闭资源,不再需要在 finally 中手动关闭。
泛型——类型安全的"模板"
泛型(Generics) 让你写出类型安全且可复用的代码——List<String> 表示"只能放字符串的列表",如果误放了 Integer 编译器会报错。
Java 泛型通过类型擦除(Type Erasure) 实现——编译后泛型信息被擦除,List<String> 和 List<Integer> 在字节码中都是 List。这是 Java 泛型的历史局限,面试中的 ? extends T(上界通配符)和 ? super T(下界通配符)以及 PECS 原则(Producer Extends, Consumer Super)是常考点。
反射——运行时的"透视眼"
反射(Reflection) 允许在运行时获取类的信息(字段、方法、构造器)并动态调用。Spring 框架的依赖注入(IoC)、MyBatis 的 Mapper 代理、JSON 序列化库等都大量依赖反射机制。
反射功能强大但有代价:性能开销、破坏封装性、绕过编译检查。
学习建议
- 数据类型与运算 → Java 语法基础
- 面向对象 → 三大特征 + Object 方法(equals/hashCode/toString)
- 异常处理 → try-catch-finally、自定义异常
- 泛型与注解 → 类型安全与元数据
- 反射与 IO → 框架底层原理
- Java 新特性 → Lambda、Stream、Record、虚拟线程