"JAVA面试100题.pdf"
Java面试中,异常处理机制是重要的考察点。在Java中,异常处理是一种处理程序运行时错误的方式。当程序违反了Java的语义规则,比如数组下标越界或尝试访问null对象,Java虚拟机(JVM)会抛出异常。这些异常通常继承自`java.lang.Throwable`类,如`IndexOutOfBoundsException`和`NullPointerException`。Java允许程序员自定义异常,并通过`throw`关键字在适当的时候抛出。这样的设计增强了程序的健壮性,因为它强制开发者处理可能的错误情况。
接口是Java中的另一大特色,它与C++的虚类有相似之处,但也有不同。Java不支持多重继承,因此接口提供了实现多种功能的途径。接口中定义的方法默认是`public`的,属性默认是`public static`,并且接口中没有任何实现代码,只有方法签名。一个类可以实现多个接口,从而达到多态的效果,这是单继承无法实现的。
Java的垃圾回收(Garbage Collection, GC)是其自动内存管理的关键特性。GC自动回收不再被引用的对象所占用的内存,防止内存泄漏,提高了程序的效率。垃圾回收器通常作为后台线程运行,其工作方式有多种,如分代复制、标记清除等。分代复制将内存分为新生代和老年代,根据对象生命周期的不同采用不同的回收策略;标记清除则是遍历所有对象,标记活跃的对象后清理未标记的。这两种方式都有各自的优缺点,如分代复制可能导致空间碎片,而标记清除可能需要较长的暂停时间。
线程同步是多线程编程中防止数据不一致的重要手段。Java提供了多种同步机制,如:
1. `synchronized` 关键字:它可以修饰方法或代码块,确保同一时刻只有一个线程能执行特定的代码。
2. `wait()` 和 `notify()`/`notifyAll()`:这两个方法用于线程间的通信。`wait()` 让当前线程等待,释放锁,`notify()` 或 `notifyAll()` 唤醒等待在特定对象监视器上的线程。
3. `ReentrantLock`:可重入锁,提供了更灵活的控制,比如公平锁和非公平锁的选择,以及尝试加锁和定时加锁。
4. `Semaphore`:信号量,用于限制同时访问特定资源的线程数量。
5. `CountDownLatch`:计数器,用于让一组线程等待其他线程完成操作后再继续执行。
6. `CyclicBarrier`:循环屏障,让一组线程等待直到所有线程都到达屏障点才继续执行。
掌握这些基本概念和机制对于Java开发者来说至关重要,特别是在面试中,它们能够展示你对Java核心特性和并发编程的理解深度。