☕️Java
约 2531 字大约 8 分钟
Java
2025-10-16
Java基础概念
Java的特点
Java主要有以下特点:
- 平台无关性:Java的"编写一次,运行无处不在"哲学是其最大的特点之一。Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。
- 面向对象:Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(OOP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
- 内存管理:Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。
Java的优势和劣势
优势:
- 跨平台性:JVM的存在,一次编写到处运行
- 面向对象:从设计之初就是OOP的
- 强大的生态系统:Spring框架、Hibernate等丰富的库和工具
- 内存管理:自动垃圾回收机制,减少内存泄漏问题
- 多线程支持:内置的线程机制,方便并发编程
- 安全性:Java有安全模型,比如沙箱机制
- 稳定性:企业级应用长期使用,版本更新注重向后兼容
劣势:
- 性能开销:相比C++或Rust等原生编译语言,JVM有一定开销
- 语法繁琐:样板代码多,相比Python等语言不够简洁
- 内存消耗:JVM本身占内存,对资源有限的环境不够友好
- 开发效率:相比动态语言,需要更多代码和编译时间
Java跨平台原理
Java能支持跨平台,主要依赖于JVM。

JVM是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种.class文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。
这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。
JVM、JDK、JRE三者关系

它们之间的关系如下:
- JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码解释或编译成机器码,并执行程序。
- JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具。
- JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库。
编译型语言和解释型语言的区别
- 编译型语言:在程序执行之前,整个源代码会被编译成机器码或者字节码,生成可执行文件。执行时直接运行编译后的代码,速度快,但跨平台性较差。
- 解释型语言:在程序执行时,逐行解释执行源代码,不生成独立的可执行文件。通常由解释器动态解释并执行代码,跨平台性好,但执行速度相对较慢。
值传递和引用传递
在Java中,参数传递只有值传递一种方式:
- 基本类型:传递的是实际值的副本,修改方法内的参数副本,不会影响原变量的值
- 引用类型:传递的是对象引用的副本,通过副本可修改对象内容,但无法改变原引用的指向
数据类型
八种基本数据类型
Java支持的数据类型分为两类:基本数据类型和引用数据类型。
基本数据类型共有8种:

| 数据类型 | 占用大小(字节) | 位数 | 取值范围 | 默认值 | 描述 |
|---|---|---|---|---|---|
byte | 1 | 8 | -128 到 127 | 0 | 最小的整数类型 |
short | 2 | 16 | -32768 到 32767 | 0 | 较少使用的整数类型 |
int | 4 | 32 | -2^31 到 2^31-1 | 0 | 常用的整数类型 |
long | 8 | 64 | -2^63 到 2^63-1 | 0L | 长整数类型 |
float | 4 | 32 | IEEE 754 | 0.0f | 单精度浮点数 |
double | 8 | 64 | IEEE 754 | 0.0d | 双精度浮点数 |
char | 2 | 16 | 0 到 65535 | '\u0000' | 字符类型 |
boolean | 1 | 8 | true/false | false | 布尔类型 |
装箱和拆箱
- 装箱:将基本类型转换为对应的包装类对象
- 拆箱:将包装类对象转换为对应的基本类型
Java提供了自动装箱和拆箱机制,简化了基本类型和包装类之间的转换。
Integer缓存机制
Integer类对-128到127之间的整数进行了缓存,这个范围内的Integer对象会被重用,而不是创建新的对象。
面向对象
面向对象三大特性
- 封装:将数据和操作数据的方法绑定在一起,隐藏内部实现细节
- 继承:子类可以继承父类的属性和方法,实现代码复用
- 多态:同一个接口可以有多种不同的实现方式
抽象类和接口的区别
| 特性 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 继承 | 单继承 | 多实现 |
| 方法 | 可以有抽象方法和具体方法 | 默认抽象方法(Java 8后可有默认方法) |
| 变量 | 可以有实例变量 | 只能有常量(public static final) |
| 构造方法 | 可以有构造方法 | 不能有构造方法 |
重载与重写的区别
- 重载(Overload):同一个类中,方法名相同但参数不同
- 重写(Override):子类重新定义父类中的方法,方法签名必须相同
关键字
final关键字
- 修饰类:类不能被继承
- 修饰方法:方法不能被重写
- 修饰变量:变量不能被重新赋值
static关键字
- 修饰变量:类变量,所有实例共享
- 修饰方法:类方法,可以直接通过类名调用
- 修饰代码块:静态代码块,类加载时执行
异常处理
Java异常体系

Java异常分为两大类:
- 检查异常(Checked Exception):编译时必须处理的异常
- 运行时异常(Runtime Exception):运行时可能出现的异常
异常处理机制
- try-catch:捕获和处理异常
- finally:无论是否发生异常都会执行的代码块
- throw:手动抛出异常
- throws:声明方法可能抛出的异常
Java新特性
Java 8新特性
- Lambda表达式:函数式编程支持
- Stream API:集合的流式处理
- Optional类:避免空指针异常
- 新的日期时间API:LocalDate、LocalTime等
- 接口默认方法:接口可以有默认实现
Lambda表达式
Lambda表达式是Java 8引入的重要特性,它允许我们将函数作为参数传递,简化了代码编写。
// 传统写法
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// Lambda表达式
list.forEach(s -> System.out.println(s));Stream API
Stream API提供了一种声明式的数据处理方式:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * 2)
.collect(Collectors.toList());I/O操作
BIO、NIO、AIO的区别
- BIO(Blocking I/O):传统的阻塞式I/O,一个连接一个线程
- NIO(Non-blocking I/O):非阻塞I/O,基于多路复用,一个线程处理多个连接
- AIO(Asynchronous I/O):异步I/O,基于事件和回调机制
NIO核心组件

- Channel(通道):数据传输的管道
- Buffer(缓冲区):数据的容器
- Selector(选择器):监听多个通道的事件
反射机制
什么是反射
反射是Java的一个重要特性,它允许程序在运行时检查和操作类、方法、字段等。
反射的应用场景
- 框架开发:Spring、Hibernate等框架大量使用反射
- 动态代理:JDK动态代理基于反射实现
- 注解处理:运行时处理注解
- 序列化:对象序列化和反序列化
设计模式
单例模式
使用volatile和synchronized实现线程安全的单例模式:
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}代理模式和适配器模式的区别
- 代理模式:主要关注控制对对象的访问,为其他对象提供代理以控制对这个对象的访问
- 适配器模式:用于接口转换,使不兼容的类能够一起工作
总结
本文档整理了Java面试中的核心知识点,涵盖了:
- 基础概念:Java特性、跨平台原理、JVM相关概念
- 数据类型:基本数据类型、包装类、装箱拆箱
- 面向对象:三大特性、抽象类与接口、重载与重写
- 关键字:final、static等关键字的使用
- 异常处理:异常体系和处理机制
- 新特性:Java 8的Lambda表达式、Stream API等
- I/O操作:BIO、NIO、AIO的区别和应用
- 反射机制:反射的原理和应用场景
- 设计模式:常见设计模式的实现
这些知识点是Java开发者必须掌握的基础内容,也是面试中经常被问到的重点。通过系统学习这些内容,可以帮助开发者建立扎实的Java基础,为进一步学习框架和高级特性打下良好基础。
免责声明
本文档内容主要来源于小林Coding网站的Java面试题整理,仅供学习和参考使用。如有侵权,请联系删除。
感谢小林Coding提供的优质技术内容,建议读者访问原网站获取最新和完整的学习资料。
