Java基础面试八股文总结(超详细版)
在 Java 面试中,基础知识是几乎每家公司都会考察的重点。本篇文章系统整理了 Java 基础核心面试知识点,包括 Java 概念、数据类型、面向对象、Object 类、异常、I/O、反射、集合等内容,适合作为面试复习资料。
一、Java 基础概念
1 Java 的优势和劣势
优势
1️⃣ 跨平台性(Write Once Run Anywhere)
Java 通过 JVM 实现跨平台,一次编写可以在多个平台运行。
2️⃣ 面向对象
Java 完全面向对象,支持封装、继承、多态。
3️⃣ 生态系统强大
Java 拥有非常完善的生态:
-
Spring
-
SpringBoot
-
MyBatis
-
Netty
-
Dubbo
4️⃣ 自动内存管理
Java 具有 垃圾回收机制(GC),可以自动回收不再使用的对象。
5️⃣ 多线程支持
Java 内置多线程机制,方便开发高并发程序。
6️⃣ 安全性高
Java 提供安全模型,例如:
-
类加载机制
-
沙箱机制
劣势
1️⃣ 性能低于原生语言
例如:
-
C
-
C++
Java 需要 JVM 运行,因此性能略低。
2️⃣ 启动速度慢
例如微服务场景中:
-
Java 启动慢
-
Go 启动快
3️⃣ 语法相对繁琐
Java 代码量相对较多。
二、Java 为什么可以跨平台
Java 跨平台的核心是 JVM(Java Virtual Machine)。
Java 程序执行流程:
Java源码 (.java)
↓
Java编译器
↓
字节码 (.class)
↓
JVM
↓
操作系统机器码
不同操作系统安装不同的 JVM,就可以运行相同的 Java 字节码。
因此实现:
一次编写,到处运行。
三、编译型语言 vs 解释型语言
编译型语言
程序运行前进行编译:
源代码 → 编译 → 机器码
特点:
-
执行速度快
-
跨平台性差
例如:
-
C
-
C++
解释型语言
运行时逐行解释执行:
源代码 → 解释器 → 执行
特点:
-
跨平台好
-
执行速度慢
例如:
-
Python
-
JavaScript
四、Java 数据类型
Java 数据类型分为两类:
1 基本数据类型
| 类型 | 数据类型 |
|---|---|
| 整数 | byte short int long |
| 浮点 | float double |
| 字符 | char |
| 布尔 | boolean |
2 引用数据类型
包括:
-
类
-
接口
-
数组
五、自动类型转换与强制转换
自动类型转换
小类型自动转大类型:
byte → short → int → long → float → double
示例:
int a = 10;
long b = a;
强制类型转换
大类型转小类型:
long a = 100;
int b = (int) a;
可能出现:
-
精度丢失
-
数据溢出
六、Java 值传递与引用传递
Java 只有值传递,没有真正的引用传递。
基本类型
传递的是 值的副本
public static void change(int a){
a = 20;
}
不会改变原值。
引用类型
传递的是 引用地址的副本
public static void change(Person p){
p.name = "Tom";
}
可以修改对象内部属性。
但不能改变原引用指向。
七、Integer 缓存机制(-128 到 127)
Java 为 Integer 提供了缓存机制:
[-128,127]
示例:
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
超过范围:
Integer a = 200;
Integer b = 200;
System.out.println(a == b); // false
因为超过范围会 创建新对象。
八、BigDecimal 与 double
在涉及 金额计算 时推荐使用:
BigDecimal
原因:
double 存在 精度丢失问题
例如:
0.1 + 0.2 ≠ 0.3
正确写法:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
注意:
使用字符串构造。
九、面向对象三大特性
Java 面向对象三大特性:
封装
继承
多态
1 封装
隐藏内部实现,对外提供接口。
例如:
private String name;
public void setName(String name){
this.name = name;
}
好处:
-
安全
-
易维护
2 继承
子类继承父类:
class Dog extends Animal
优点:
-
代码复用
3 多态
多态表现为:
方法重载
同一个类中:
方法名相同
参数不同
add(int a,int b)
add(double a,double b)
方法重写
子类重写父类方法:
@Override
public void run(){
}
十、抽象类 vs 接口
| 特性 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 继承 | 单继承 | 多实现 |
| 方法 | 可有普通方法 | JDK8可有default |
| 变量 | 普通变量 | public static final |
十一、static 关键字
static 表示 属于类
static 修饰变量
static int age;
特点:
-
所有对象共享
static 修饰方法
static void test(){
}
特点:
-
可以通过类名调用
static 代码块
类加载时执行一次:
static{
System.out.println("初始化");
}
十二、深拷贝与浅拷贝
浅拷贝
复制引用地址。
两个对象共享同一个引用。
深拷贝
复制整个对象。
互不影响。
十三、Java 创建对象的方式
1️⃣ new 关键字
User user = new User();
2️⃣ 反射
User user = User.class.newInstance();
3️⃣ clone()
4️⃣ 反序列化
十四、反射机制
反射允许程序在 运行时获取类信息。
可以:
-
获取类
-
获取方法
-
获取属性
-
动态创建对象
示例:
Class clazz = Class.forName("User");
应用:
-
Spring
-
MyBatis
-
注解解析
十五、BIO、NIO、AIO
| IO模型 | 特点 |
|---|---|
| BIO | 同步阻塞 |
| NIO | 同步非阻塞 |
| AIO | 异步非阻塞 |
BIO
一个连接一个线程。
并发能力差。
NIO
一个线程管理多个连接。
使用:
Selector
高并发服务器常用。
AIO
完全异步 IO。
回调机制。
十六、Java 异常体系
Java 异常顶级类:
Throwable
分为:
Error
Exception
Error
系统级错误,例如:
-
OutOfMemoryError
程序无法处理。
Exception
程序可以处理。
分为:
运行时异常
例如:
-
NullPointerException
-
IndexOutOfBoundsException
受检异常
例如:
-
IOException
-
SQLException
必须处理。
十七、Object 类核心方法
Object 是所有类的父类。
常见方法:
toString()
用于返回对象信息。
@Override
public String toString(){
return "User{id=" + id + "}";
}
getClass()
获取类对象。
obj.getClass()
clone()
复制对象。
默认是 浅拷贝。
十八、== 与 equals
==
比较:
-
基本类型:值
-
引用类型:地址
equals()
用于比较对象内容。
例如 String 重写了 equals 方法。
十九、为什么重写 equals 必须重写 hashCode
HashMap 存储流程:
hashCode()
↓
定位数组
↓
equals()
↓
判断是否相同
如果只重写 equals:
可能导致 HashMap 去重失效。
因此必须同时重写。
二十、String 常用方法
常见方法:
length()
equals()
substring()
trim()
replace()
isEmpty()
示例:
String s = "hello";
s.length();
s.substring(1);
s.replace("h","H");
二十一、String、StringBuffer、StringBuilder区别
| 类型 | 是否可变 | 线程安全 | 性能 |
|---|---|---|---|
| String | 不可变 | 安全 | 低 |
| StringBuffer | 可变 | 安全 | 中 |
| StringBuilder | 可变 | 不安全 | 高 |
使用建议
单线程字符串操作:
StringBuilder
多线程:
StringBuffer
普通字符串:
String
二十二、ArrayList 扩容机制
ArrayList 底层是 动态数组。
默认容量:
10
扩容规则:
原容量 × 1.5
核心流程:
add()
↓
ensureCapacity()
↓
grow()
↓
Arrays.copyOf()
总结
Java 基础面试常见核心考点:
-
Java 跨平台原理
-
数据类型
-
面向对象
-
抽象类 vs 接口
-
static 关键字
-
equals 与 hashCode
-
String 相关问题
-
BIO / NIO
-
Java 异常体系
-
集合框架
这些内容几乎是 Java 面试必问八股文,熟练掌握可以应对大部分基础面试。
更多推荐



所有评论(0)