"这是一份全面的Java面试题集,涵盖了Java基础知识、面向对象、类与继承、序列化、集合框架、反射机制等多个方面。旨在帮助求职者准备Java程序员的面试,提供实战练习和理解Java核心技术的机会。"
1. **super()与this()的区别**
- `super()` 用于调用父类的构造方法,确保子类实例化时父类的初始化。
- `this()` 用于在同一个类中引用当前对象的其他构造方法。
2. **作用域public, protected, private的区别**
- `public` 访问权限最大,可以在任何地方访问。
- `protected` 可以在同包下和不同包的子类中访问。
- `private` 是最小的访问权限,只能在本类中访问。
- 不写访问修饰符默认为包级私有。
3. **编程输出图形** 这通常是关于循环和字符打印的问题,例如要求输出星号(*)组成的形状或等腰三角形。
4. **事件委托机制和垃圾回收机制**
- 事件委托机制是Java Swing或JavaFX中处理用户界面事件的方式,通过事件监听器将事件处理逻辑委托给父组件。
- 垃圾回收机制是Java自动内存管理的一部分,负责识别并释放不再使用的对象,以防止内存泄漏。
5. **跳出多重嵌套循环** 可以使用`break`语句配合标签来跳出特定层的循环。
6. **Java序列化** Java序列化是将对象的状态转换为字节流的过程,实现`Serializable`接口的类可以被序列化。例如:
```java
class MyClass implements Serializable {
// 实例变量
}
ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream);
oos.writeObject(myObject);
```
7. **一个.java源文件的多类限制** 一个.java文件可以包含多个类,但最多只能有一个公共类(public class),其余的类可以是非公共的。
8. **排序方法** 包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。快速排序示例:
```java
void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
int partition(int[] arr, int low, int high) {
// 分区逻辑
}
```
9. **Overload和Override的区别**
- Overload(重载)发生在同一类中,方法名相同但参数列表不同。
- Override(重写)发生在子类中,方法名、返回类型和参数列表必须与父类方法完全一致。
10. **Final类的特点**
- Final类不能被继承。
- Final方法不能被子类重写。
- Final变量一旦赋值后不可更改。
11. **继承时类的执行顺序**
- 构造顺序:先调用父类的构造器,然后执行子类的构造器。
12. **内部类实现方式**
- 成员内部类:在类的外部定义,与类的其他成员一样。
- 局部内部类:在方法或作用域内定义。
- 匿名内部类:没有名字,通常用作接口或抽象类的实现。
13. **排序与序列化**
- 排序可以使用Java集合框架中的`Collections.sort()`方法。
- 序列化可以通过实现`Serializable`接口实现。
14. **在COLLECTION框架中,实现比较要实现Comparable接口或Comparator接口。**
15. **插入法排序** 示例代码略。
16. **截取字符串的函数** 要注意处理中文字符,确保不会截断汉字。
17. **打印昨天的当前时刻** 使用`Calendar`或`LocalDateTime`类计算昨天的时间。
18. **抽象类与接口的区别**
- 抽象类可以包含字段和方法的实现,而接口只定义方法签名。
- 类可以实现多个接口,但只能继承一个抽象类。
19-28. **反射机制、包及核心类、方法唤起、类型转换、日期时间操作等**
- 类的反射机制允许在运行时动态创建对象、调用方法和访问属性。
- 获取`Class`对象的常见方式:`Class.forName()`, `对象.getClass()`, `类名.class`。
- 反射中,`Constructor`, `Method`, `Field` 类分别代表类的构造器、方法和字段。
- 唤起类方法使用`Method`对象的`invoke()`方法。
- 类型转换涉及到`Integer.valueOf()`、`Double.parseDouble()`等方法。
- 时间日期操作可使用`java.util.Date`、`java.time`包下的类。
这些面试题涵盖了许多Java基础和进阶知识,对于理解和掌握Java编程非常有帮助。