"Java面试题集,包含大公司如IBM, E*Trade, Siebel, Motorola, SUN等的面试题目,主要关注Java基础知识,如final, finally, finalize的区别,匿名内部类,静态嵌套类与内部类的不同,及HashMap与Hashtable的区别等。"
在Java编程语言中,`final`, `finally`, 和 `finalize` 是三个重要的关键字,它们各自有不同的用途:
1. **final**: 用于声明变量、方法或类。一旦声明为`final`,就不能改变其值或重写。对于变量,这意味着赋值后不能再修改;对于方法,意味着子类不能覆盖此方法;对于类,表示该类不能被继承。
2. **finally**: 在异常处理中使用,确保代码块中的语句无论是否抛出异常都会被执行。它是保证资源释放(如关闭文件流)的关键,即使在try-catch块中有return语句,finally块的代码也会被执行。
3. **finalize**: 这是一个特殊的方法,用于对象被垃圾收集器回收前进行清理工作。不过,不建议依赖`finalize`进行资源清理,因为其执行时间不确定且效率较低。现代Java开发更倾向于使用`try-with-resources`或手动关闭资源。
接下来是其他面试题的相关知识点:
4. **AnonymousInnerClass**: 可以继承其他类并实现接口,但只能继承一个类,可以实现多个接口。匿名内部类通常用于简化代码,特别是在事件监听器或适配器的创建中。
5. **StaticNestedClass 和 InnerClass**: 静态嵌套类(静态内部类)可以直接访问外部类的静态成员,而不需要实例化外部类的对象,它不是外部类的实例成员。而普通内部类(非静态内部类)与外部类有更紧密的关联,可以访问外部类的所有成员,包括私有成员。
6. **& 和 &&**: `&` 是位运算符,用于按位与操作,而`&&`是逻辑与运算符,只有在左侧表达式为真时才会评估右侧。在条件判断中,`&&`常常用于短路逻辑,提高效率。
7. **HashMap 和 Hashtable**: HashMap是非同步的,性能较好,允许null键和值;Hashtable是同步的,线程安全,但不允许null键和值。
8. **Collection 和 Collections**: Collection是所有单列集合的父接口,而Collections是提供对集合操作的工具类,如排序、查找、填充等。
9. **assert**: 用于断言,用于调试阶段检查代码的正确性。在生产环境中,如果未开启断言,assert语句将被忽略。
10. **GC (Garbage Collection)**: Java自动内存管理的一部分,负责回收不再使用的对象所占用的内存,避免内存泄漏。
11. **Strings = new String("xyz");** 创建了两个String对象:一个在常量池,一个在堆内存。String是不可变的,因此"xyz"被复制了一份。
12. **Math.round()**: 返回最接近参数的整数,四舍五入规则。所以Math.round(11.5)等于12,Math.round(-11.5)等于-11。
13. **sleep() 和 wait()**: sleep()是Thread类的方法,使当前线程暂停指定时间,不释放锁。wait()是Object类的方法,使线程等待,直到收到通知或被中断,释放对象锁。
了解这些基本概念和差异对于Java开发者来说至关重要,因为它们是构建和维护高质量、高性能应用的基础。在面试中,展示对这些核心概念的深入理解和实际应用能力,将有助于获得理想的职位。