java基础高频考点主线为:语言特性、面向对象本质、内存与运行机制、核心类库行为及常见陷阱;需深入理解封装的可控暴露、继承的里氏替换、多态的编译/运行时区分,“==”与equals差异、string不可变性与创建方式,jvm内存分区与异常分类,以及抽象类与接口、重载与重写的本质区别。

Java基础面试题高频考点不是靠死记硬背,而是抓住几条主线:语言特性、面向对象本质、内存与运行机制、核心类库行为、以及常见陷阱。下面按实际面试中出现频率和深度,分四块梳理清楚。
一、面向对象三大特性必须讲清底层逻辑
不能只答“封装就是private,继承就是extends,多态就是父类引用指向子类对象”。面试官要听你理解背后的意图和约束:
- 封装重点在“可控暴露”——比如setter里做参数校验、延迟初始化、日志埋点;不是所有private都要配getter/setter
- 继承要明确子类能继承但不能访问父类private成员;强调里氏替换原则:子类必须能完全替代父类,不能重写父类的契约(比如父类方法保证非空,子类却返回null)
- 多态必须区分编译时(重载)和运行时(重写);举例说明:List list = new ArrayList(),调用list.add()走的是ArrayList的实现,而list.size()也是,但list.iterator()返回的Iterator类型由实际对象决定
二、“== vs equals”和字符串三兄弟是必考操作题
这俩问题几乎100%出现在第一轮,错一个就暴露基础不牢:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- ==永远比较地址(引用类型)或值(基本类型);equals默认行为同==,但String、Integer等重写了它,变成内容比较;自己写类要用equals就得重写,且必须同步重写hashCode
- String不可变,所以拼接、replace等操作都返回新对象;StringBuilder适合单线程拼接,StringBuffer加了synchronized,适合多线程但慢;别在循环里用+拼字符串
- String s = new String("abc") 创建2个对象:常量池里的"abc" + 堆里的新String实例;而String s = "abc" 只创建1个(从常量池取)
三、JVM内存结构和异常体系要能画出简图说清流向
不是背名词,而是能解释现象:
- 局部变量存在虚拟机栈,new出来的对象存在堆,类信息存在元空间(JDK8+);StackOverflowError是栈帧太多(如递归过深),OutOfMemoryError可能是堆满或元空间溢出
- Exception分检查型(IOException)和非检查型(RuntimeException);前者编译期强制处理,后者运行时才抛;Error(如OutOfMemoryError)一般不捕获,程序无法恢复
- finally块几乎总执行,唯一例外是System.exit()或JVM崩溃;try-with-resources本质是自动调用close(),要求资源类实现AutoCloseable
四、抽象类与接口、重载与重写必须对比着讲
这是区分理解深度的关键点:
- 抽象类可含构造器、普通方法、静态方法、成员变量;接口(JDK8+)可有default/static方法,但所有字段隐式public static final;抽象类体现“is-a”,接口体现“can-do”
- 重载发生在同一个类,参数列表不同(类型/个数/顺序),返回值和修饰符无关;重写发生在父子类之间,方法签名完全一致,子类不能缩小访问权限(如父类public,子类不能private)
- 接口可以extends多个接口,类只能extends一个类但可implements多个接口;抽象类不能被final修饰,接口也不能被final修饰
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










