JAVA面试精华:final, finally, finalize详解与匿名内部类、静态内嵌类、位运算&与逻辑&&及HashMa...

需积分: 0 3 下载量 16 浏览量 更新于2024-09-18 收藏 35KB DOCX 举报
在Java面试中,面试官经常会关注一些关键的概念和区别,以考察候选人的基础知识和理解深度。以下是一些重要的知识点: 1. **final、finally和finalize的区别**: - `final` 是修饰符,用于声明类、变量或方法的特性。类被final修饰意味着不能被继承,变量和方法则表示其值不可变或不可重写。变量必须在声明时初始化,并且一旦赋值后不可更改。 - `finally` 是在异常处理中的关键部分,无论是否发生异常,finally块中的代码都会被执行,常用于释放资源或进行清理工作。 - `finalize()` 方法是Java中的垃圾回收机制的一部分,当对象不再被引用时,垃圾收集器会自动调用它,用于执行对象的清理工作,但并不能保证一定会执行。 2. **匿名内部类**: 匿名内部类是指没有显式名称的内部类,虽然不能直接继承其他类,但它可以通过实现接口来扩展功能。这种设计常用于简化回调函数的使用,如实现Runnable接口来创建线程。 3. **Static Nested Class vs Inner Class**: - Inner Class(非静态内部类)与外部类关联紧密,通常需要通过外部类的实例才能访问。它们可以访问外部类的所有成员,包括私有和受保护的。 - Static Nested Class(静态内部类)是独立于外部类存在的,不需要外部类实例即可创建,它有自己的作用域,且不能访问非静态外部类的成员,除非通过外部类的实例间接访问。 4. **& 和 && 的区别**: - `&` 是位运算符,用于按位与两个整数,返回一个新的整数,只有对应位都为1时结果才为1。 - `&&` 是逻辑与运算符,用于布尔表达式,只有当两个表达式都为真时结果才为真。注意,它只适用于布尔类型的操作。 5. **HashMap 和 Hashtable 的区别**: - `HashMap` 和 `Hashtable` 都是Map接口的实现,提供了键值对存储。主要区别在于: - `HashMap` 允许键和值为null,而 `Hashtable` 不允许; - `HashMap` 是非同步的,多线程环境可能需要额外的同步措施,而 `Hashtable` 是线程安全的; - `HashMap` 在性能上优于 `Hashtable`,因为插入、删除和查找操作的时间复杂度更低(平均O(1)),但 `Hashtable` 提供了更强的线程安全保证; - `HashMap` 的迭代器在遍历过程中可能会出现“ Iterator.remove()` 方法失效的问题,而 `Hashtable` 没有此问题。 掌握这些核心概念对于Java开发者来说至关重要,它们不仅是面试时的常见考点,也是日常编程中的实用工具。深入理解这些知识点能帮助你更好地设计和优化代码,以及应对各种面试挑战。