在 2024 年的 Java 面试中,可能会遇到各种类型的问题,这些问题涵盖了 Java 的基础知识、
高级特性、设计模式、框架应用、并发编程、JVM 原理等多个方面。以下是一些常见的 Java
面试题及其答案概览:
### 一、Java 基础知识
1. **面向对象的特征有哪些?**
- 抽象:忽略与当前目标无关的细节,只关注与当前目标相关的方面。
- 继承:允许子类继承父类的属性和方法,并可以添加或修改新的方法。
- 封装:将数据和方法组合成一个独立的单元,通过接口与外界交互。
- 多态:允许不同类的对象对同一消息作出响应。
2. **作用域 public, private, protected, 以及不写时的区别?**
- **public**:任何类都可以访问。
- **private**:只有定义该成员的类内部可以访问。
- **protected**:同一包内的类以及所有子类可以访问。
- **default(不写时)**:同包内的类可以访问,但子类(不同包)无法访问。
3. **简述 Java 中的数据类型及其占用字节?**
- 基本数据类型:`byte`(1 字节)、`short`(2 字节)、`int`(4 字节)、`long`(8 字节)、
`float`(4 字节)、`double`(8 字节)、`char`(2 字节)、`boolean`(理论上不占字节,但在 JVM
中可能占用 1 字节)。
- 引用数据类型:如类(Class)、接口(Interface)、数组等,它们的大小取决于 JVM 和
操作系统的具体实现。
4. **String、StringBuilder、StringBuffer 的区别及使用场景?**
- **String**:不可变,适用于少量数据的操作。
- **StringBuilder**:可变,线程不安全,适用于单线程大量数据的操作。
- **StringBuffer**:可变,线程安全,适用于多线程大量数据的操作。
### 二、Java 高级特性
1. **什么是不可变对象?Java 中怎么创建一个不可变对象?**
- 不可变对象是指一旦创建,其状态(成员变量)就不能被改变的对象。
- 创建不可变对象的方法包括:将所有成员变量设置为`private`且不提供`setter`方法;将
所有成员变量设置为`final`;确保所有成员变量在构造方法中被初始化后就不会再被修改。
2. **Overload(重载)和 Override(重写)的区别?**
- **重载**:发生在同一个类中,方法名相同但参数列表不同(参数个数、类型或顺序不
同)。
- **重写**:发生在子类和父类之间,子类可以定义一个与父类具有相同签名(方法名和
参数列表都相同)的方法,以覆盖父类的实现。
3. **forward(转发)和 redirect(重定向)的区别?