Java编程语言在面试中常常涉及一系列基础到高级的知识点,以下是对给定的面试题目的详细解释:
1. **final, finally, finalize的区别**:
- `final` 用于声明常量(变量)、不可覆盖的方法和不能继承的类。
- `finally` 用于异常处理,确保代码块在任何情况下都会被执行,无论是否发生异常。
- `finalize` 是Object类的一个方法,当垃圾收集器回收对象时会被调用,用于进行资源清理。
2. **匿名内部类**:
- 可以继承其他类或实现接口,常用于事件监听器等一次性使用的场景。
3. **Static Nested Class 和 Inner Class**:
- Static Nested Class 是静态内部类,不依赖外部类实例即可创建,可以有自己的静态成员。
- Inner Class 是普通内部类,需要外部类实例才能创建,它可以访问外部类的私有成员。
4. **& 和 &&的区别**:
- `&` 是位运算符,用于按位与操作,也可用作逻辑与(在布尔表达式中)。
- `&&` 是逻辑与运算符,仅在第一个操作数为真时评估第二个操作数,常用于短路逻辑判断。
5. **HashMap 和 Hashtable**:
- HashMap 不是线程安全的,性能较高,允许null键和值。
- Hashtable 是线程安全的,不允许null键和值。
6. **Collection 和 Collections**:
- Collection 是所有集合接口的顶级接口,如Set和List都继承它。
- Collections 是一个工具类,提供了对集合的各种操作方法,如排序、查找、线程安全化等。
7. **assert关键字**:
- 用于断言,用于调试阶段检查代码的正确性,运行时可启用或禁用。
8. **GC(垃圾收集)**:
- 自动检测和回收不再使用的对象以释放内存,防止内存泄露。
9. **String对象的创建**:
- `new String("xyz")` 创建两个对象,一个在常量池,一个在堆内存。
10. **Math.round()方法**:
- Math.round(11.5) 返回12,Math.round(-11.5) 返回-11,它会将浮点数四舍五入为最接近的整数。
11. **short类型的赋值**:
- `s1 = s1 + 1;` 错误,因为s1+1的结果是int类型,需要显式转换。
- `s1 += 1;` 正确,编译器会自动处理类型转换。
12. **sleep()和wait()**:
- `sleep()` 让当前线程暂停一段时间,不会释放对象锁。
- `wait()` 使线程等待,释放对象锁,等待其他线程唤醒。
13. **Java中的goto**:
- Java中没有goto关键字,它鼓励使用结构化编程。
14. **数组和String的length()**:
- 数组没有`length()`方法,但有一个`length`属性来获取长度。
- String有`length()`方法来获取字符串长度。
以上就是Java面试中常见的知识点,理解并掌握这些内容对于Java开发者来说至关重要。