Java 基础面试题目涵盖了Java语言的关键概念和特性,以下是对这些知识点的详细解析:
1. `final`, `finally`, `finalize`的区别:
- `final`:它是一个修饰符,可以用来修饰类、方法和变量。对于类,final表示不能被继承;对于方法,final意味着方法不能被重写;对于变量,final则表示该变量一旦赋值后就不能再改变。
- `finally`:这是异常处理的一部分,无论是否发生异常,finally块中的代码都会被执行,通常用于确保关键的清理代码能够执行。
- `finalize`:这是Object类中的一个方法,当垃圾收集器准备回收一个对象时,如果该对象重写了finalize()方法,垃圾收集器会在回收前调用此方法,用于执行对象清理工作。
2. 匿名内部类:匿名内部类不能继承其他类,但可以实现接口。这在需要创建一个只使用一次的简单类实现某个接口时非常有用。
3. 静态内部类(Static Nested Class)与非静态内部类(Inner Class):
- 静态内部类不需要外部类的实例就能创建对象,而普通内部类需要一个外部类的实例。
- 静态内部类不能直接访问外部类的非静态成员,而普通内部类可以直接访问外部类的所有成员,包括私有成员。
- 静态内部类可以有自己的静态成员,而普通内部类不能。
4. `&`和`&&`的区别:
- `&`是位运算符,用于进行按位与操作,对于两个布尔值,`&`也会进行逻辑与操作,但无论结果如何,整个表达式都会被计算。
- `&&`是布尔逻辑运算符,只有当第一个条件为真时,才会计算第二个条件,这是一种短路操作符。
5. HashMap和Hashtable的区别:
- HashMap允许null键和null值,而Hashtable不允许。
- HashMap是非同步的,效率相对较高,适合多线程环境下的非同步访问;而Hashtable是同步的,适用于线程安全的需求,但性能稍差。
- HashMap的迭代顺序是不确定的,而Hashtable的迭代顺序相对固定,因为它使用了枚举。
6. Collection和Collections的区别:
- Collection是一个接口,它是所有集合类的父接口,定义了集合的基本操作,如添加、删除、遍历等。
- Collections是一个工具类,提供了很多静态方法,用于操作集合,如排序、查找、转换等。
7. `assert`的使用:
- 断言主要用于调试,它在程序开发阶段帮助检查代码的正确性。断言表达式如果为假,则抛出AssertionError。
- 断言可以通过在编译时启用(-source 1.4),在运行时通过使用`-ea`标志启用。在生产环境中,通常禁用断言以提高性能。
以上就是Java基础面试题中涉及的关键知识点,理解并掌握这些内容对于理解和编写高质量的Java代码至关重要。