Java是一种广泛使用的面向对象的编程语言,其面试题涵盖了众多核心概念和技术。以下是一些重要的Java面试知识点:
1. **super()与this()的区别**:
- `this` 关键字用于引用当前对象,常用来调用构造器或访问当前对象的成员变量。
- `super` 关键字用于引用父类的对象,它主要用于调用父类的构造器或者访问父类的成员变量和方法。
2. **作用域 public, protected, private, 及不写时的区别**:
- `public`:所有类都可以访问。
- `protected`:同一包内的类和子类可以访问。
- `private`:只有本类可以访问。
- 不写(默认):同一包内的类可以访问。
3. **编程输出特定图形**:这通常涉及到循环和条件语句,例如使用嵌套`for`循环来打印星号或其他字符构成的图形。
4. **JAVA 的事件委托机制和垃圾回收机制**:
- 事件委托机制是Java GUI编程中的概念,通过事件监听器实现组件间的交互。
- 垃圾回收机制是Java自动内存管理的一部分,负责找出不再使用的对象并释放它们占用的内存。
5. **跳出多重嵌套循环**:使用`break`语句可以直接跳出最内层循环,`break label;`可以跳出标记的循环。
6. **Java序列化**:通过实现`Serializable`接口,可以将对象转换为字节流,便于存储和网络传输。例如:
```java
class MyClass implements Serializable {
// ...
}
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.ser"));
out.writeObject(new MyClass());
out.close();
```
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);
}
}
```
9. **Overload和Override的区别**:
- Overload(重载)发生在同一个类中,方法名相同但参数列表不同。
- Override(覆盖)发生在子类对父类方法的重新定义,方法名、返回类型和参数列表必须完全相同。
10. **Final类的特点**:Final类不能被继承,确保类的封闭性和不变性。
11. **继承时类的执行顺序**:构造器的执行顺序是:父类的静态初始化块 -> 子类的静态初始化块 -> 父类的非静态初始化块 -> 父类的构造器 -> 子类的非静态初始化块 -> 子类的构造器。
12. **内部类的实现方式**:包括成员内部类、局部内部类、匿名内部类和静态内部类。
13. **实现序列化的方法**:除了实现`Serializable`接口外,还可以使用`writeObject()`和`readObject()`方法进行自定义序列化和反序列化。
14. **在COLLECTION框架中实现比较**:需要实现`Comparable`接口或使用`Comparator`接口。
15. **插入法排序**:插入排序的基本思想是将数组分为已排序部分和未排序部分,然后逐步将未排序元素插入到已排序部分。
16. **截取字符串的函数**:确保截取时不会分割中文字符,需考虑字符编码,例如使用UTF-8编码。
17. **打印昨天的当前时刻**:利用`java.util.Calendar`或`java.time`包中的类来获取昨天的日期,并格式化输出。
18. **文件读写和计数器**:使用`FileReader`/`BufferedReader`读取文件,每读取一行就增加计数器。
以上只是部分Java面试题的关键知识点,实际面试中可能还会涉及更多内容,如多线程、异常处理、集合框架、设计模式、JVM内存模型、IO/NIO、网络编程等。深入理解和掌握这些知识点是成为一名优秀的Java程序员的基础。