j ava八股
时间: 2025-05-26 11:26:36 浏览: 20
### Java 常见面试题及答案
#### JVM 和 JRE 的区别是什么?
JRE(Java Runtime Environment)是 Java 运行时环境,包含了运行已编译 Java 程序所需的所有组件,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)[^1]。而 JVM(Java Virtual Machine)则是 JRE 的一部分,负责执行字节码。
#### 解释一下 hashCode() 和 equals() 方法的关系。
hashCode() 和 equals() 方法都定义在 Object 类中。对于两个逻辑上相等的对象,它们的 hashCode 应该相同;然而,具有相同 hashCode 的对象不一定相等。这是因为多个不同的对象可以映射到同一个哈希值,这被称为哈希冲突[^2]。因此,在实现 HashMap 或 HashSet 时,即使两个键有不同的内容,只要它们的 hashCode 相同就可能被放置在同一桶中,此时会进一步调用 equals() 来区分这些键是否真正相等。
#### String 是基本数据类型吗?
不是,String 不是一个基本数据类型而是属于引用类型。它实际上是由字符数组构成的一个不可变类。一旦创建了一个字符串实例就不能再修改其内部的内容了。
#### final, finally, finalize 的区别在哪里?
- `final` 关键字用于修饰变量、方法或者类,表示这个成员或实体不能再改变;
- `finally` 总是在 try-catch 结构之后被执行的部分,无论是否有异常抛出都会执行这段代码块内的语句;
- `finalize()` 是一个特殊的方法名,当垃圾回收器准备释放某个对象所占用资源之前自动调用此函数来完成清理工作,不过自 JDK9 开始官方建议不再依赖于 finalize() 函数来进行必要的清除操作因为它的行为并不稳定可靠。
```java
public class Example {
private static int count = 0;
public void incrementCount(final int value) { // 使用 final 参数
this.count += value;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("Object is being garbage collected");
}
}
```
#### 接口和抽象类的区别有哪些?
接口是一种完全未实现的功能契约,里面只包含常量字段以及默认/静态方法体之外没有任何具体实现细节。而抽象类则允许部分功能的具体化并能拥有状态属性。另外一点不同在于子类继承单一父级的同时还可以实现多接口特性组合而成的新角色。
阅读全文
相关推荐

















