Java面试必备:final, finally, finalize深度解析

需积分: 9 8 下载量 110 浏览量 更新于2024-09-23 1 收藏 10KB TXT 举报
"这是一份包含了32个经典Java面试笔试题目的文本,主要讨论了final、finally和finalize的关键区别,以及对Java核心概念如StaticNestedClass与InnerClass的区分,HashMap、Hashtable、Collection和Collections的使用,以及assert断言的开启和使用方式。此外,还涉及了Java垃圾回收(GC)机制的基本理解。这些问题经常在eBay等公司的面试中出现,对于求职者来说是重要的准备内容。" 在这份文件中,我们首先关注的是`final`、`finally`和`finalize`的区别: 1. `final`:`final`在Java中作为一个修饰符,可以用于类、变量和方法。当一个类被声明为`final`时,意味着它不能被继承,也不能同时声明为抽象类。对于变量,`final`关键字表示该变量一旦被初始化后就不能再改变。对于方法,`final`方法不能被子类重写。 2. `finally`:`finally`块在异常处理中起到关键作用。无论是否发生异常,`finally`块中的代码都会被执行。它通常用于确保关键清理操作的执行,例如关闭文件流或网络连接。 3. `finalize`:`finalize`方法是Java对象生命周期的一部分,它在垃圾收集器准备回收对象之前调用。通常用于进行资源释放,但并不保证一定会执行,因为依赖于垃圾收集器的工作时机。从Java 9开始,`finalize()`的使用已被废弃。 接下来,文件提到了Java的核心概念: - `StaticNestedClass`与`InnerClass`:静态嵌套类(Static Nested Class)是静态成员类,不持有对外部类的隐式引用,可以直接通过类名访问。而内部类(Inner Class)是实例成员类,每个实例都关联一个外部类的实例。 - `HashMap`、`Hashtable`、`Collection`和`Collections`:`HashMap`是基于哈希表实现的,线程非同步;`Hashtable`类似,但它是线程安全的。`Collection`是所有集合接口的根接口,而`Collections`是工具类,提供了一组静态方法来操作集合。 - `assert`:`assert`用于在开发阶段进行断言检查,只有在开启断言的情况下才有效。`assert expression1;`如果expression1为false,则抛出AssertionError。`assert expression1 : expression2;`则在表达式1为false时,提供expression2作为错误信息。 最后,文件简要讨论了Java的垃圾回收(GC): - GC是Java自动内存管理的一部分,负责回收不再使用的对象以释放内存。开发者可以通过`System.gc()`或`Runtime.getRuntime().gc()`手动触发GC,但一般不推荐这样做,因为这会干扰JVM的垃圾收集策略。 这些知识点对于Java开发者来说是基础且重要的,尤其在面试和笔试中经常出现。理解和掌握这些内容能帮助开发者更好地编写、调试和优化Java代码。