整理自 Java 基础面试题 91 道,已精简冗余表述,保留考点与结论。详细原理见下方「相关学习笔记」或各题末尾链接。
相关学习笔记
| 专题 | 笔记 |
|---|---|
| Java 环境与程序结构 | Java 环境与程序结构 |
| 变量与数据类型 | Java 变量与基本数据类型 |
| 运算符与类型转换 | Java 运算符与类型转换 |
| 流程控制 | Java 流程控制 |
| 数组 | Java 数组基础 |
| 方法 | Java 方法基础 |
| 类与对象 | Java 类与对象 |
| 封装、继承、多态 | Java 封装、继承与多态 |
| 抽象类与接口 | Java 抽象类与接口 |
| 异常处理 | Java 异常处理 |
| static 关键字 | Java static 关键字 |
| 包与访问控制 | Java 包、作用域与访问控制 |
| final/finally/finalize | Java final、finally、finalize 区别 |
| 内部类 | Java 内部类 |
| Object 类 | Java Object 类 |
| 字符串 | Java 字符串 |
| 包装类型 | Java 包装类型 |
| IO 基础 | Java IO 基础 |
| BIO/NIO/AIO/Netty | Java BIO、NIO、AIO 与 Netty |
目录
- Java 概述
- 基础语法 · 数据类型
- 基础语法 · 编码与注释
- 基础语法 · 访问修饰符
- 基础语法 · 运算符与关键字
- 流程控制
- 面向对象 · 概述与三大特性
- 面向对象 · 类与接口
- 变量与方法
- 内部类
- 重写与重载
- 对象相等
- 值传递
- Java 包
- IO 流
- 反射
- String
- 包装类
Java 概述
1. 何为编程
用程序设计语言编写代码,让计算机按人的意图逐步执行并解决问题。本质是人与计算机之间的指令交流。
2. 什么是 Java
面向对象编程语言,吸收 C++ 优点,去掉多继承、指针等复杂特性;静态类型、跨平台。
3. JDK 1.5 之后三大版本
Java SE:标准版,桌面/服务器/嵌入式应用。Java EE / Jakarta EE:企业版,Web 服务、组件模型(2018 起 EE 移交 Eclipse,称 Jakarta EE)。Java ME:微型版,移动/嵌入式设备。
4. JDK、JRE、JVM 区别
JVM:运行字节码的虚拟机,跨平台核心。JRE = JVM + 核心类库,只运行程序。JDK = JRE + 开发工具(javac、jar 等),开发必备。→ Java 环境与程序结构
5. 跨平台原理
源码编译成 .class 字节码,由目标平台的 JVM 解释/编译执行。一次编译,多平台运行(前提是安装了对应 JVM)。
6. Java 语言特点
简单易学、面向对象、平台无关、网络编程友好、多线程、健壮(强类型/异常/GC)、安全。
7. 什么是字节码?好处?
.class 文件,面向 JVM 而非特定 CPU。兼顾解释型语言的可移植性和较高执行效率。
8. 主类是什么?应用 vs 小程序
一个程序可有多个类,但只有一个主类。应用程序:含 main() 的类。Applet:继承 JApplet/Applet,无 main,由浏览器调用 init()/start()。
9. 应用程序与小程序差别
应用从 main() 启动;Applet 嵌入浏览器,由容器管理生命周期。
10. Java 与 C++ 区别
都支持 OOP。Java:无指针直接访内存、单继承(接口可多实现)、自动 GC。C++:支持多继承。
11. Oracle JDK vs OpenJDK
发布节奏不同(Oracle 约三年 vs OpenJDK 约三个月)。OpenJDK 开源参考实现;Oracle JDK 商业发行版,长期支持策略不同。核心代码高度重合,生产环境两者均可,注意 LTS 版本与许可协议。
基础语法 · 数据类型
12. Java 有哪些数据类型
基本类型:byte/short/int/long、float/double、char、boolean。引用类型:类、接口、数组。→ Java 变量与基本数据类型
13. switch 能作用在 byte/long/String 上吗
Java 5 前仅 byte/short/char/int;5 起支持枚举;7 起支持 String。long 始终不支持。
14. 最有效率计算 2×8
2 << 3(左移 3 位 = 乘 2³)。
15. Math.round(11.5) 和 Math.round(-11.5)
分别为 12 和 -11。原理:加 0.5 后向负无穷取整(floor)。
16. float f = 3.4 是否正确
不正确。3.4 默认 double,赋给 float 需强转或加 F:3.4f。
17. short s1=1; s1=s1+1 有错吗?s1+=1 呢
s1 = s1 + 1 错:s1+1 结果是 int,需强转。s1 += 1 正确:含隐式 (short) 强转。
基础语法 · 编码与注释
18. Java 采用何种编码
Unicode,跨平台统一字符集。
19. Java 注释分类
单行 //、多行 /* */、文档 /** */。编译忽略,不可嵌套。
基础语法 · 访问修饰符
20. public/private/protected/default 区别
| 修饰符 | 同类 | 同包 | 子类 | 其他包 |
|---|---|---|---|---|
| private | ✓ | |||
| default | ✓ | ✓ | ||
| protected | ✓ | ✓ | ✓ | |
| public | ✓ | ✓ | ✓ | ✓ |
类/外部接口不能用 private/protected。→ Java 包、作用域与访问控制
基础语法 · 运算符与关键字
21. & 和 && 区别
&:按位与或逻辑与(两边都求值)。&& 短路与:左边为 false 则右边不执行。→ Java 运算符与类型转换
22. Java 有没有 goto
goto 是保留字,未使用。
23. final 有什么用
修饰类不可继承、方法不可重写、变量引用不可改(引用类型内容仍可变)。→ Java 封装、继承与多态
24. final / finally / finalize 区别
final:关键字,限制不可变。finally:try-catch 收尾块,通常必执行。finalize:Object 方法,GC 前回调,已废弃,勿用于资源释放。→ final/finally/finalize 区别 · Java 异常处理
25. this 用法
① 指向当前对象 ② 区分成员与参数同名 ③ 调用本类其他构造 this(...)。→ Java 类与对象
26. super 用法
① 访问父类成员 ② 区分子类与父类同名成员 ③ 调用父类构造 super(...)。
27. this 与 super 区别
都必须在构造器第一行;不能同时出现;均不能在 static 环境使用。this 指向本对象,super 访问父类。
28. static 主要意义
类级别成员/方法,无需实例即可访问;静态块类加载时执行一次,可用于初始化。
29. static 特点
全实例共享一份;类加载时分配;可通过类名直接访问。
30. static 应用场景
共享常量、工具方法、静态代码块、静态内部类、静态导包。
31. static 注意事项
静态只能直接访问静态;非静态可访问静态和非静态。→ Java static 关键字
流程控制
32. break / continue / return 区别
break:跳出当前循环。continue:跳过本次循环。return:结束当前方法。→ Java 流程控制
33. 如何跳出多重嵌套循环
在外层循环前加标号,内层 break 标号;。
面向对象 · 概述与三大特性
34. 面向对象 vs 面向过程
过程:步骤化,性能高,维护扩展弱。对象:模型化,封装/继承/多态,易维护扩展,抽象层次更高。
35. 面向对象特征
封装:隐藏细节,暴露接口。继承:复用父类。多态:同一引用调用不同实现。抽象:提取共性。→ Java 封装、继承与多态
36. 多态机制与实现
编译看左边引用类型,运行看右边实际对象(动态绑定)。条件:继承 + 重写 + 向上转型。
37. 面向对象五大原则(了解)
SRP 单一职责、OCP 开闭、LSP 里氏替换、DIP 依赖倒置、ISP 接口隔离。
面向对象 · 类与接口
38. 抽象类 vs 接口
都不能实例化。抽象类:is-a,可有构造器/任意修饰符/单继承。接口:can-do,默认 public 方法,多实现,字段默认 public static final。优先接口定义行为,抽象类提供公共实现。→ Java 抽象类与接口
39. 普通类 vs 抽象类
普通类无抽象方法、可实例化;抽象类可有抽象方法、不可实例化。
40. 抽象类能用 final 修饰吗
不能,矛盾:抽象类需被继承,final 禁止继承。
41. new 关键字与引用区别
new 在堆创建对象;引用在栈中存地址。一引用可指 0/1 个对象;一对象可被多引用指向。→ Java 类与对象
变量与方法
42. 成员变量 vs 局部变量
| 成员变量 | 局部变量 | |
|---|---|---|
| 位置 | 类中方法外 | 方法/块内 |
| 存储 | 堆(随对象) | 栈 |
| 默认值 | 有 | 无,需赋值 |
| 作用域 | 整个类 | 块/方法内 |
43. 无参构造方法的作用
子类构造若未显式 super(...),需父类有无参构造供默认调用,否则编译错误。
44. 为何先调父类无参构造
完成父类部分初始化,再初始化子类。
45. 构造方法作用?没声明能运行吗
初始化对象。未声明时编译器提供默认无参构造。
46. 构造方法特性
名与类同;无返回值类型;创建对象时自动调用;可重载不可重写。→ Java 方法基础
47. 静态变量 vs 实例变量
静态变量类加载时分配一份;实例变量每对象一份。
48. 静态变量 vs 普通变量
静态变量全实例共享,类加载初始化;实例变量各对象独立。
49. 静态方法 vs 实例方法
静态:类名.方法() 或对象调用,只能访问静态成员。实例:需对象,可访问所有成员。
50. 静态方法内为何不能调非静态成员
静态属类级别,不依赖实例;非静态成员需先有对象。
51. 方法返回值作用
把方法执行结果返回给调用方,供后续使用。
内部类
52. 什么是内部类
定义在另一个类内部的类,是类的成员之一。→ Java 内部类
53. 内部类分类
静态内部类、成员内部类、局部内部类、匿名内部类。→ Java 内部类
54. 内部类优点
访问外部类私有成员;更好的封装;实现多重继承效果;方便回调。
55. 内部类应用场景
多算法、非 OOP 语句块封装、代码扩展、仅供外部类使用的辅助类。
56. 局部/匿名内部类访问局部变量为何要 final
局部变量在栈上随方法结束销毁,内部类可能仍持有引用;final 保证拷贝值不变,避免生命周期不一致。
57. 内部类程序题(变量遮蔽)
同名时:局部变量 > this.成员 > Outer.this.成员。例:局部 14,内部类 13,外部类 12。→ Java 内部类
重写与重载
58. 构造器能否被重写
不能重写(不继承),但可重载。
59. 重载 vs 重写
重载:同类,方法名同、参数列表不同,与返回值无关。重写:父子类,签名相同,访问权限不能更严,返回值协变。→ Java 封装、继承与多态
对象相等
60. == 与 equals 区别
==:基本类型比值,引用类型比地址。equals:默认同 ==;重写后比内容。String 已重写 equals。
61. hashCode 与 equals
相等对象 hashCode 必同;hashCode 同不一定 equals。重写 equals 必须重写 hashCode(HashMap/HashSet 依赖)。→ Java Object 类
62. 对象相等 vs 引用相等
对象相等比内容;引用相等比地址。
值传递
63. 传参后能改对象属性,是值还是引用传递
值传递。传递的是引用的拷贝,可通过拷贝修改对象状态,但不能让调用者的引用指向新对象。
64. 为什么 Java 只有值传递
方法参数是值的拷贝。改基本类型不影响实参;改对象字段会影响(同一对象);交换引用变量不影响调用方。
65. 值传递 vs 引用传递(概念)
值传递:拷贝值,互不影响。引用传递:传地址本身。Java 始终是值传递(引用也是拷贝)。
Java 包
66. JDK 常用包
java.lang(基础)、java.util(集合)、java.io/java.nio(IO)、java.net(网络)、java.sql(数据库)。
67. java 与 javax 区别
历史命名差异,现均为标准 API 一部分,无实质区别。
IO 流
68. IO 流分几种
按流向:输入/输出。按单元:字节/字符。按角色:节点流/处理流。基类:InputStream/OutputStream、Reader/Writer。→ Java IO 基础
69. BIO / NIO / AIO 区别
BIO:同步阻塞,一连接一线程。NIO:同步非阻塞,Channel + Buffer + Selector 多路复用。AIO:异步非阻塞(NIO.2),基于回调。→ Java BIO、NIO、AIO 与 Netty
70. Files 常用方法
exists、createFile、createDirectory、delete、copy、move、size、readString、writeString、newBufferedReader 等。→ Java IO 基础
反射
71. 什么是反射
运行时获取类信息并动态创建对象、调用方法的能力。
72. 反射优缺点
优点:灵活、框架基础。缺点:性能较低、破坏封装。
73. 反射应用场景
Spring/Hibernate 等框架、JDBC Class.forName、动态代理、配置驱动实例化。
74. 获取 Class 三种方式
对象.getClass()、Class.forName(全限定名)、类名.class。
String
75. 字符常量 vs 字符串常量
字符 'a' 单字符;字符串 "a" 地址引用。字符占 2 字节(UTF-16),字符串占多个字节+结束符。
76. 字符串常量池
堆中专门存字符串字面量,相同字面量共享引用,节省内存。
77. String 是基本数据类型吗
不是,是引用类型。基本类型 8 种 + 枚举。文本用 String 封装 char 数组。
78. String 特性
不可变、常量池缓存、final 类。→ Java 字符串
79. String 为何不可变
内部 private final char[] value(JDK 9+ 为 byte[]),无修改方法。
80. String 真的不可变吗
对象内容不可变,但引用可变(str = str + " World" 指向新对象)。反射可改底层数组,但不应这样做。
81. 能否继承 String
不能,final 类。
82. String str=“i” vs new String(“i”)
前者常量池;后者堆上新对象。
83. new String(“xyz”) 几个对象
两个:常量池 "xyz" + 堆上 String 对象。
84. 字符串反转
StringBuilder/StringBuffer 的 reverse()。
85. 数组有 length() 吗?String 呢
86. String 常用方法
indexOf、charAt、replace、trim、split、getBytes、length、toLowerCase/UpperCase、substring、equals。
87. HashMap 用 String 做 key 好处
String 不可变,hashCode 可缓存,减少重复计算。
88. String / StringBuffer / StringBuilder
String 不可变,每次改生成新对象。StringBuffer 可变+同步,线程安全。StringBuilder 可变无同步,单线程更快。→ Java 字符串
包装类
89. 自动装箱与拆箱
基本类型 ↔ 包装类型的自动转换(Java 5+)。
90. int 与 Integer 区别
int 基本类型;Integer 包装类,可为 null,提供工具方法。
91. Integer a=127 与 b=127 相等吗
在 -128~127 缓存范围内 == 为 true(同一对象);超出为 false。new Integer() 始终 false。→ Java 包装类型
附:1 年经验岗 — 图中考点在本站的对应笔记
以下内容在仓库里已有,按图中「必准备 / 选准备 / 可弱化」对照查阅(非单独重写文章)。
必准备(约 70%)
| 图中考点 | 本站笔记 |
|---|---|
| 集合 ArrayList/LinkedList、HashMap 扩容 | Java 集合 · 集合面试 52 道 |
| 多线程:创建方式、线程池参数、synchronized/volatile | 线程基础 · 线程池 · volatile 与 JMM · 多线程 59 道 |
| 异常:受检/非受检、业务统一处理 | 异常处理(含 @RestControllerAdvice) |
| Spring:@Autowired、三层、@Transactional 同类失效 | IoC · MVC 三层 · 事务 |
| MyBatis:#{} ${}、动态 SQL、Mapper/XML | MyBatis 概述 · MyBatis 面试 37 道 |
| MySQL:索引、EXPLAIN 优化、隔离级别与脏读 | MySQL 基础 · MySQL 面试 40 道 |
| Redis:五类型、过期、穿透/击穿/雪崩 | Redis 基础 · Redis 面试 15 道 |
| 项目经验(主项目 10 分钟) | 准备:模块、2~3 个接口、表设计、Redis 用法、1 个慢 SQL 或 Bug 案例(话术可写在个人笔记里) |
选准备(约 20%)
| 图中考点 | 本站笔记 |
|---|---|
| Spring Boot 自动配置、Starter | 自动配置与 Starter |
| Nginx 反向代理、静态资源 | Spring Cloud 基础(Nginx 小节) |
| 微服务:注册中心、网关、Feign | 同上 · Spring Cloud 面试 49 道 |
可弱化(约 10%)
| 图中考点 | 建议 |
|---|---|
| JVM 调优、G1、Full GC | 知道 JDK/JRE/JVM 即可 → 环境与程序结构 |
| 分布式 Seata、CAP 长篇 | 听过即可,见 Spring Cloud 面试 |
| 算法 | 反转链表、两数之和;单例 → 创建型模式;生产者消费者 → 阻塞队列 |