1. Java基础知识点概述
Java作为一门诞生于1995年的编程语言,至今仍是全球最流行的开发语言之一。根据2023年最新的开发者调查报告显示,Java在企业级应用、Android开发和大数据领域占据着不可替代的地位。对于初学者而言,掌握Java基础知识是迈向高级开发的必经之路。
我见过太多开发者急于学习框架而忽视基础,结果在面试和实际工作中频频碰壁。Java基础就像建筑的地基,决定了你未来技术栈的高度和稳定性。本文将系统梳理Java核心知识点,并结合实际开发中的常见问题和解决方案,帮助读者构建完整的知识体系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java环境搭建与配置
2.1 JDK安装与版本选择
当前主流Java版本是Java 17(LTS长期支持版)和Java 21(最新特性版)。对于初学者,建议选择Java 17作为起点:
bash复制# 在Linux/macOS上验证安装
java -version
# 应输出类似:openjdk version "17.0.8" 2023-07-18
注意:避免混合安装多个JDK版本,这会导致环境变量冲突。如果必须多版本共存,可使用jenv或SDKMAN!等工具管理。
2.2 环境变量配置详解
正确的环境变量配置是避免"java不是内部命令"错误的关键:
-
JAVA_HOME:指向JDK安装目录(不是JRE)
- Windows示例:
C:\Program Files\Java\jdk-17 - macOS/Linux示例:
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
- Windows示例:
-
PATH:添加
%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(Unix系)
验证配置是否成功:
bash复制echo $JAVA_HOME # 应显示正确路径
javac -version # 应与java版本一致
2.3 IDE的选择与配置
IntelliJ IDEA是当前Java开发的主流选择。安装后需注意:
- 设置正确的Project SDK(对应JDK版本)
- 配置编译器输出目录(避免"源文件不在模块中"错误)
- 调整内存参数(防止OutOfMemoryError):
ini复制# 在idea64.exe.vmoptions中增加 -Xms1024m -Xmx2048m
3. Java核心语法精要
3.1 数据类型与变量
Java是强类型语言,数据类型分为两大类:
基本类型:
- 整型:byte(1B)、short(2B)、int(4B)、long(8B)
- 浮点:float(4B)、double(8B)
- 布尔:boolean(1b)
- 字符:char(2B)
引用类型:
- 类、接口、数组等
实际开发中常见陷阱:浮点数比较应使用BigDecimal,避免直接使用==比较。
3.2 运算符与表达式
Java运算符优先级(从高到低):
- 括号
()、点号. - 单目
!、~、++、-- - 乘除
*、/、% - 加减
+、- - 移位
<<、>>、>>> - 关系
<、<=、>、>= - 相等
==、!= - 位与
&、位异或^、位或| - 逻辑与
&&、逻辑或|| - 三元
?: - 赋值
=
示例:复合赋值运算符的陷阱
java复制int i = 5;
i = i + (i++ * 2); // 结果是多少?
3.3 流程控制结构
分支结构:
- if-else:适用于条件较少的情况
- switch:JDK12后支持表达式形式(->语法)
循环结构:
- for:明确循环次数时使用
- while:条件满足时循环
- do-while:至少执行一次
性能提示:在多层循环中,将条件判断放在外层可以显著提升性能。
4. 面向对象编程基础
4.1 类与对象
类的三大特性:
- 封装:通过private/protected/public控制访问
- 继承:extends实现,Java是单继承
- 多态:方法重写(Override)和重载(Overload)
构造方法要点:
- 默认提供无参构造
- 如果自定义了有参构造,需显式定义无参构造
- 构造方法可以重载
4.2 接口与抽象类
对比表:
| 特性 | 接口(interface) | 抽象类(abstract class) |
|---|---|---|
| 方法实现 | JDK8后支持default方法 | 可以包含具体方法 |
| 变量 | 默认public static final | 无限制 |
| 构造方法 | 不能有 | 可以有 |
| 多继承 | 支持多实现 | 单继承 |
| 设计目的 | 定义行为契约 | 代码复用 |
4.3 常用核心类
String的不可变性:
java复制String s1 = "hello";
String s2 = new String("hello");
// s1在常量池,s2在堆内存
集合框架:
- List:有序可重复(ArrayList、LinkedList)
- Set:无序不重复(HashSet、TreeSet)
- Map:键值对(HashMap、TreeMap)
实际经验:HashMap初始容量应设置为预计元素数量的1.3倍,减少扩容开销。
5. 异常处理机制
5.1 异常分类
Java异常体系:
code复制Throwable
├── Error(系统错误,不应捕获)
└── Exception
├── RuntimeException(未检异常)
└── 其他Exception(已检异常)
5.2 异常处理最佳实践
- 不要捕获Throwable或Error
- 避免空的catch块
- 使用try-with-resources管理资源
- 自定义异常应提供有意义的描述
示例:
java复制try (InputStream is = new FileInputStream("test.txt")) {
// 自动关闭资源
} catch (FileNotFoundException e) {
logger.error("文件未找到", e);
} catch (IOException e) {
logger.error("IO异常", e);
}
6. Java新特性概览
6.1 Java 8核心特性
-
Lambda表达式:
java复制List<String> names = Arrays.asList("Tom", "Jerry"); names.sort((a, b) -> a.compareTo(b)); -
Stream API:
java复制List<Integer> evens = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); -
Optional:优雅处理null
java复制Optional.ofNullable(user) .map(User::getName) .orElse("default");
6.2 Java 11-17重要特性
- 局部变量类型推断(var)
- 文本块("""...""")
- Record类(简化POJO)
- Sealed类(限制继承)
- Pattern Matching(简化instanceof)
7. 常见问题解决方案
7.1 内存不足问题
OutOfMemoryError处理:
- 调整JVM参数:
bash复制
-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m - 使用内存分析工具(VisualVM、MAT)
- 检查内存泄漏(静态集合、未关闭资源等)
7.2 版本兼容性问题
"源发行版需要目标发行版"错误:
- 确保以下配置一致:
- pom.xml中的maven-compiler-plugin版本
- IDE中的项目SDK和语言级别
- 模块配置中的目标字节码版本
7.3 Lombok兼容性问题
"不支持的编译器"警告:
- 确保IDE安装了Lombok插件
- 在IDE设置中启用注解处理
- 检查Lombok版本与JDK版本的兼容性
8. 算法与数据结构实现
8.1 排序算法
快速排序实现:
java复制public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return i + 1;
}
8.2 常用数据结构
链表反转:
java复制public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
9. 设计模式实践
9.1 单例模式
双重检查锁定实现:
java复制public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
9.2 工厂模式
简单工厂示例:
java复制public interface Shape {
void draw();
}
public class ShapeFactory {
public Shape getShape(String type) {
return switch (type.toLowerCase()) {
case "circle" -> new Circle();
case "rectangle" -> new Rectangle();
default -> throw new IllegalArgumentException("未知形状");
};
}
}
10. Java学习路线建议
-
初级阶段(1-3个月):
- 掌握基础语法和OOP概念
- 熟悉常用类库(集合、IO等)
- 理解异常处理机制
-
中级阶段(3-6个月):
- 深入多线程编程
- 学习网络编程和NIO
- 掌握JDBC和基础SQL
-
高级阶段(6个月+):
- JVM原理与性能调优
- 主流框架(Spring、MyBatis)
- 分布式系统设计
个人经验:不要急于学习框架,先打好基础。我见过太多开发者能熟练使用Spring但解释不了Java基本概念,这在技术面试中会非常被动。
