"JAVA面试经典题集锦包含了Java面试中常见的问题,涵盖了语法、类与对象、集合框架、内存管理等多个方面,旨在帮助面试者准备Java笔试和面试。"
在Java编程领域,面试中常常会涉及到一些核心概念和技术点,以下是对标题和描述中提及的一些知识点的详细解释:
1. **final, finally, finalize的区别**:
- `final` 是一个修饰符,用于声明变量、方法或类不可改变。一旦被声明为`final`,就不能再修改。
- `finally` 是异常处理的组成部分,无论是否抛出异常,`finally`块中的代码都会被执行,确保关键清理操作的执行。
- `finalize` 是一个特殊的方法,当垃圾收集器确定回收一个对象时,会调用该对象的`finalize`方法,但不保证一定会调用。
2. **AnonymousInnerClass(匿名内部类)**:
- 匿名内部类是没有名字的类,它可以实现接口或继承父类。在需要一次性使用的场景中,匿名内部类提供简洁的代码表示。
3. **StaticNestedClass和Inner Class的区别**:
- 内部类(Inner Class)是嵌套在另一个类内部的类,它可以直接访问外部类的非静态成员,而静态嵌套类(Static Nested Class)则不能,但它可以独立于外部类存在。
4. **& 和 && 的区别**:
- `&` 是位运算符,可以用于逻辑与,也可以进行按位与操作。
- `&&` 是逻辑与运算符,只有当左侧表达式为真时,才会评估右侧表达式,这称为短路逻辑。
5. **HashMap和Hashtable的区别**:
- `HashMap`是非同步的,允许`null`键和值,而`Hashtable`是同步的,不允许`null`键和值。
- `HashMap`在Java 8之后引入了红黑树,性能更优,而`Hashtable`仍然是基于数组和链表。
6. **Collection和Collections的区别**:
- `Collection`是所有集合接口的父接口,代表单个元素的集合。
- `Collections`是针对集合类的一个帮助工具类,提供了各种静态方法,用于操作集合,如排序、查找、转换等。
7. **assert的使用**:
- `assert`用于断言,它允许程序员在代码中插入条件检查,通常用于测试和调试,当断言的条件为假时,程序会抛出AssertionError。
8. **GC(Garbage Collection)**:
- GC是Java的自动内存管理系统,负责回收不再使用的对象所占用的内存,以防止内存泄漏。
9. **String对象的创建**:
- `Strings = new String("xyz");` 创建了两个对象,一个在字符串常量池,一个在堆上。
- `Math.round(11.5)` 等于12,`Math.round(-11.5)` 等于-11。
10. **shorts1 的赋值问题**:
- `short s1 = 1; s1 = s1 + 1;` 错误,因为s1+1的结果是int类型,需要强制转换。
- `short s1 = 1; s1 += 1;` 正确,编译器会自动处理类型转换。
11. **sleep() 和 wait() 的区别**:
- `sleep()` 是Thread类的方法,使当前线程暂停执行指定时间,不会释放对象锁。
- `wait()` 是Object类的方法,使线程等待,释放对象锁,直到其他线程调用notify()或notifyAll()唤醒。
12. **面向对象的特征**:
- 抽象、继承、封装和多态是面向对象编程的四大特征。
- 抽象简化复杂性,继承实现代码重用,封装保护数据安全,多态增加程序灵活性。
这些知识点在Java面试中非常常见,掌握它们能帮助面试者更好地应对各种技术问题。