"Java面试题及答案,包括final, finally, finalize 区别,匿名内部类,静态嵌套类与内部类对比,&和&&的差异,HashMap与Hashtable的异同,以及Java基础如作用域,ArrayList与Vector,HashMap与Hashtable的特性,char类型存储中文,多线程实现方式等知识点。"
Java面试中的常见问题涵盖了语言的基础、并发编程以及集合框架等多个方面。让我们详细探讨一下这些知识点:
1. **final, finally, finalize的区别**:
- `final` 是用来声明不可变的,它可以修饰变量、方法和类。对于变量,一旦赋值后不能改变;对于方法,表示该方法不能被重写;对于类,表示该类不能被继承。
- `finally` 用于异常处理,无论是否发生异常,finally块中的代码总会被执行,通常用于释放资源。
- `finalize` 是对象被垃圾回收器回收前调用的方法,用于执行清理操作,但不保证一定会被调用,且使用不当可能导致性能下降。
2. **匿名内部类**:
- 匿名内部类可以直接实例化,没有类名,可以继承类或实现接口。它常用于简洁地创建一次性使用的类。
- 可以继承其他类,也可以实现接口,但在Java 8中,如果只是简单地实现一个函数接口,匿名内部类可以简化为Lambda表达式。
3. **Static Nested Class(静态嵌套类)与 Inner Class(内部类)**:
- 静态嵌套类不持有对外部类的引用,可以直接实例化,类似于普通的顶级类,只是它被定义在另一个类的内部。
- 内部类持有外部类的引用,可以访问外部类的非静态成员,需要外部类实例才能创建内部类对象。
- 静态嵌套类不能直接访问外部类的非静态成员,除非通过外部类的实例。
4. **& 和 && 的区别**:
- `&` 是按位与运算符,可以用于逻辑与操作,也可用于按位操作,如在位运算中。
- `&&` 是逻辑与运算符,只有在左侧表达式为真时才会计算右侧表达式,常用于短路逻辑判断。
5. **HashMap 和 Hashtable 的区别**:
- `HashMap` 不是线程安全的,而 `Hashtable` 是线程安全的,适合多线程环境。
- `HashMap` 允许键或值为 `null`,而 `Hashtable` 不允许。
- `HashMap` 在容量扩展时,新的容量是原容量的1.5倍,而 `Hashtable` 是原来的2倍。
- `HashMap` 是Java 1.2引入的,`Hashtable` 早在早期JDK版本就有了。
6. **Java基础**:
- **作用域**:`public` 对所有类可见,`private` 只在本类可见,`protected` 对本包和子类可见,没有关键字的作用域是包内可见(友好,friendy)。
- **ArrayList 和 Vector**:主要区别在于线程安全性和容量增长策略,Vector是同步的,ArrayList是非同步的,且Vector增长策略较保守,效率相对低。
- **HashMap 和 Hashtable**:除了线程安全性外,HashMap允许null键值,而Hashtable不允许,HashMap是Java 1.2引入,较新,性能更好。
- **char 存储中文**:Java的char类型是Unicode编码,可以存储中文字符,每个char占16位。
- **多线程实现**:Java中实现多线程有两种主要方式,一是继承Thread类,二是实现Runnable接口。同步实现方式有synchronized关键字,wait()、notify()和notifyAll()方法,以及Lock接口及其实现类。
了解并掌握这些知识点,对于Java开发者来说,无论是面试还是实际开发,都将大有裨益。不断学习和实践,是提升Java技能的关键。如果你有任何疑问或需要进一步的解释,随时可以通过指定的方式联系。