"Java面试常见问题及答案"
Java面试题涵盖了众多核心概念,以下是一些关键知识点的详细说明:
1. **super()与this()的区别**:
- `super()`用于子类构造器中调用父类的构造器,确保父类的初始化工作得以完成。
- `this()`同样用于子类构造器,但它是调用本类的其他构造器,使得代码复用。
2. **作用域public, protected, private, 以及不写时的区别**:
- `public`:全局可访问,任何地方都能访问。
- `protected`:在同一个包或不同包的子类中可访问。
- `private`:仅限于同一类内访问。
- 不写(默认):在同一包内可访问。
3. **JAVA的事件委托机制**:事件处理通常采用委托模式,事件源(如按钮)注册监听器,当事件发生时,事件源将事件传递给监听器处理。
- **垃圾回收机制**:Java自动管理内存,当对象不再被引用时,垃圾收集器会回收其占用的内存。
4. **跳出多重嵌套循环**:使用`break`语句可以直接跳出最外层循环;使用标签(`label`)配合`break`可以指定跳出特定循环。
5. **Java序列化**:通过实现`Serializable`接口来标记一个类可序列化。例如:
```java
class MyClass implements Serializable {
// 类的成员变量...
}
MyClass obj = new MyClass();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file.ser"));
oos.writeObject(obj);
oos.close();
```
6. **内部类的实现方式**:有匿名内部类、成员内部类、局部内部类和静态内部类四种形式。
7. **.java源文件与类的关系**:一个源文件可以包含多个类,但只能有一个公开类(`public`类),且公开类的名称必须与文件名相同。
8. **排序方法**:冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。快速排序示例:
```java
void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return i + 1;
}
void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
```
9. **Overload和Override的区别**:
- Overload(重载):发生在同一个类中,方法名相同,但参数列表不同(参数个数、类型或顺序不同)。
- Override(重写):发生在父类与子类之间,方法名、返回类型和参数列表都必须相同,但子类可以提供不同的实现。
10. **Final类的特点**:Final类不能被继承,它的目的是为了防止类被滥用,保证代码安全。
11. **继承时类的执行顺序**:首先执行父类的构造器,然后执行子类的构造器。
12. **内部类的实现**:包括匿名内部类、成员内部类、局部内部类和静态内部类,它们各自有不同的使用场景和特点。
13. **实现序列化**:除了实现`Serializable`接口,还可以使用`transient`关键字忽略某些字段不参与序列化。
14. **Collections框架中的比较**:需要实现`Comparable`接口或提供`Comparator`来比较元素。
以上只是部分Java面试题的关键知识点,完整解答涵盖了类的构造、继承、多态、异常处理、集合框架、IO流、日期时间、反射、泛型、线程等多个方面,每个知识点都值得深入理解和实践。