Java基础面试题精选

2025年 阅读约 13 分钟 面试指南 · Java面试

精选Java基础面试高频题目,涵盖面向对象、集合框架、异常处理、泛型等核心知识点,附详细解答和面试技巧。

一句话总结

Java 基础是面试的敲门砖,核心考点:面向对象(封装继承多态)、集合框架(HashMap/ArrayList 底层原理)、异常体系(受检/非受检)、泛型(类型擦除)。每个知识点都有对应的深度解析文章,点击下方链接深入学习。

面向对象

Q:Java中面向对象的三大特性是什么?

面向对象的三大特性是封装、继承和多态。

封装:将数据和操作数据的方法绑定在一起,通过访问修饰符控制外部对内部数据的访问。封装的核心是隐藏实现细节,暴露必要的接口。

继承:子类继承父类的属性和方法,实现代码复用。Java是单继承的,一个类只能继承一个父类,但可以实现多个接口。

多态:同一操作作用于不同对象,产生不同的行为。多态通过方法重写和接口实现来体现,是运行时动态绑定的。

面试技巧:回答时不仅要说出三大特性,还要举出实际应用场景,展示理解深度。

📖 深入阅读:接口 vs 抽象类 · 重载 vs 重写 · static 关键字 · final/finally/finalize

集合框架

Q:HashMap的底层实现原理是什么?

JDK 1.8中HashMap采用数组+链表+红黑树实现。当链表长度超过8且数组长度达到64时,链表会转换为红黑树,查找效率从O(n)提升到O(log n)。

扩容机制:默认初始容量16,负载因子0.75。当元素数量超过容量×负载因子时,扩容为原来的2倍。扩容时需要重新计算每个元素的位置。

Q:ArrayList和LinkedList的区别?

ArrayList基于动态数组实现,随机访问快O(1),插入删除慢O(n);LinkedList基于双向链表实现,插入删除快O(1),随机访问慢O(n)。实际开发中ArrayList使用更频繁,因为CPU缓存友好。

📖 深入阅读:HashMap 底层原理 · ArrayList vs LinkedList · HashMap 容量为何是2的幂 · HashSet 实现原理

异常处理

Q:Java中的异常体系是怎样的?

Java异常的顶层类是Throwable,分为Error和Exception两大类。

Error:程序无法处理的系统错误,如OutOfMemoryError、StackOverflowError。

Exception:程序可以处理的异常,分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。

受检异常必须在编译时处理(try-catch或throws),如IOException;非受检异常(RuntimeException及其子类)可以不处理,如NullPointerException。

📖 深入阅读:Java 异常体系详解

泛型机制

Q:什么是泛型擦除?

Java泛型是在编译期实现的,编译后会擦除泛型信息,替换为原始类型(Raw Type)。这就是类型擦除。

泛型擦除的规则:
1. 无限定的类型参数替换为Object
2. 有上界的类型参数替换为上界类型
3. 保留桥接方法保证多态性

List<String> list = new ArrayList<>();\n// 编译后泛型信息被擦除\nList list = new ArrayList();

这就是为什么不能使用 new T()instanceof T 的原因。

📖 深入阅读:Java 泛型详解 · == vs equals · String 不可变性

实战场景

场景:正确重写 equals 和 hashCode

public class User { private Long id; private String name; @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return Objects.equals(id, user.id); } @Override public int hashCode() { return Objects.hash(id); } } // 使用示例 Set<User> users = new HashSet<>(); users.add(new User(1L, "张三")); users.add(new User(1L, "张三")); // 不会重复添加 System.out.println(users.size()); // 1

面试技巧

1. 理解而非背诵:面试官更看重对原理的理解,而非死记硬背答案。

2. 结合源码:能说出看过JDK源码会大大加分,如HashMap的putVal方法。

3. 举一反三:回答一个问题后,主动延伸相关知识点,展示知识广度。

4. 场景化回答:将知识点与实际项目场景结合,说明在什么场景下使用什么方案。