"Java面试题集锦,涵盖了final, finally, finalize, AnonymousInnerClass, StaticNestedClass, HashMap, Hashtable等核心概念"
在Java面试中,掌握关键知识点是至关重要的。以下是一些Java语言中常见的面试问题及其答案:
1. **final, finally, finalize**
- `final` 关键字用于声明一个变量、方法或类不可改变。对于变量,一旦赋值后不能再次赋值;对于方法,表示不能被重写;对于类,表示该类不能有子类。
- `finally` 通常与`try-catch`语句一起使用,确保在异常发生时也能执行特定的清理代码,即使`return`语句已被执行。
- `finalize()` 是一个特殊的方法,用于对象被垃圾收集器回收前进行清理工作,但不保证一定会被调用,且通常不推荐依赖此方法进行资源释放。
2. **AnonymousInnerClass** 和 **StaticNestedClass**
- 匿名内部类(Anonymous Inner Class)是没有名字的内部类,常用于实现接口或继承类,可以作为局部变量或参数使用。
- 静态嵌套类(Static Nested Class)是内部类的一个变体,它可以访问外部类的静态成员,而无需实例化外部类,且静态嵌套类不持有对外部类的引用。
3. **StaticNestedClass 和 InnerClass 的区别**
- 内部类(Inner Class)直接关联到外部类的实例,它可以直接访问外部类的非静态成员,创建内部类实例需要外部类实例。
- 静态嵌套类是独立的,不依赖于外部类的实例,因此可以像其他静态成员一样直接使用。
4. **HashMap 和 Hashtable**
- `HashMap` 是非同步的,效率较高,允许插入`null`键值对,但是遍历顺序不确定。
- `Hashtable` 是线程安全的,不允许`null`键值对,遍历顺序与插入顺序无关,它是`Dictionary`类的子类,自Java 1.2起,`HashMap`作为`Map`接口的主要实现。
5. **Collections 和 Collection**
- `Collection` 是所有集合框架的顶级接口,包括了`List`和`Set`接口。
- `Collections` 是操作`Collection`对象的工具类,提供了很多实用方法,如排序、查找、填充等。
6. **assert**
- `assert` 用于在开发阶段进行条件检查,只有在启动Java虚拟机时启用`-ea`选项,断言才会生效。如果断言表达式为`false`,则抛出`AssertionError`异常。
7. **Garbage Collection (GC)**
- Java的垃圾收集机制自动管理内存,当对象不再可达时,GC会回收其占用的内存空间。`System.gc()`可请求垃圾收集,但不保证立即执行,且不推荐直接调用。
- 对于字符串常量,如`new String("xyz")`,会创建一个新的`String`对象,尽管其内容与常量池中的相同,这可能会导致不必要的内存消耗。
8. **Math.round()**
- `Math.round(11.5)` 返回 12,因为`round`方法对浮点数进行四舍五入,向上取整。
- `Math.round(-11.5)` 返回 -11,负数时同样四舍五入,但向下取整。
这些知识点是Java程序员必须掌握的基础,了解并能熟练运用它们将有助于在面试中表现出色。