【Java面试笔记】主要涵盖了Java语言的一些核心概念和面试中常见的问题。以下是对这些知识点的详细解释:
1. **final, finally, finalize的区别**
- `final`:用于声明不可变的类、变量或方法。当一个类被声明为final,意味着它不能有子类。一个final变量一旦初始化后,就不能再改变其值。final方法也不能被子类重写。
- `finally`:在异常处理中使用,无论是否发生异常,finally块中的代码都会被执行。这是确保清理工作得以完成的关键。
- `finalize`:是Object类的一个方法,用于在对象被垃圾收集器回收前进行清理工作。但不应依赖此方法进行关键的资源释放,因为它并不总能得到调用。
2. **匿名内部类**:匿名内部类可以直接实现接口或继承类,但不能同时进行。它可以用于快速实现简单的类或接口实例。
3. **&和&&的区别**
- `&`:位运算符,用于按位与操作。在布尔表达式中,它表示逻辑与,无论两侧表达式的结果如何,整个表达式都会被计算。
- `&&`:逻辑与运算符,只有当左侧表达式为真时,才会计算右侧表达式。
4. **HashMap和Hashtable**
- `HashMap`:非同步,允许null键和null值,无排序。
- `Hashtable`:同步,不允许null键和null值,比HashMap慢。
5. **Collection和Collections**
- `Collection`:是所有集合接口的根接口,定义了集合的基本操作。
- `Collections`:是工具类,提供了对集合的各种操作的静态方法。
6. **GC(Garbage Collection)**
- GC是Java的自动内存管理机制,负责回收不再使用的对象,以避免内存泄漏。GC的存在使得程序员无需手动管理内存。
7. **String对象的创建**
创建`String s = new String("xyz")`会产生两个对象,一个是字符串常量"xyz",另一个是引用对象s指向"xyz"。
8. **Math.round()**
`Math.round(11.5)`返回12,`Math.round(-11.5)`返回-11。
9. **short变量的加法**
`short s1 = 1; s1 = s1 + 1;`是错误的,因为s1+1的结果是int型,需要显式转换。而`s1 += 1`是正确的,编译器会自动处理类型转换。
10. **sleep()和wait()**
- `sleep()`:使当前线程休眠指定的时间,不会释放对象锁。
- `wait()`:使线程等待,释放对象锁,等待其他线程调用`notify()`或`notifyAll()`来唤醒。
11. **length()方法**
- 数组通过`.length`属性获取长度,而不是`.length()`方法。
- `String`类有`.length()`方法用于获取字符串的字符数量。
12. **Overload和Override**
- **Overload(重载)**:在同一个类中,方法名相同但参数列表不同的方法称为重载方法,返回类型不影响重载。
- **Override(重写)**:子类重新定义父类中已经存在的方法,保持方法名、参数列表和返回类型一致,但可以改变方法体实现。重写用于多态性。
以上就是Java面试笔记中涉及到的主要知识点,这些内容对于理解和解答Java面试问题非常关键。