17道Java基础面试题!收藏吃灰!

JAVA中 , final, finally, finalize 的区别在Java编程语言中 , final、finally和finalize是三个具有不同含义和用途的关键字 。
1、 final: final是一个修饰符 , 它可以修饰类、方法和变量 。它的作用是限制某些对象或行为的改变 。

  • 当用于修饰类时 , 表示该类不能被继承 。例如:public final class MyClass {} 。
  • 当用于修饰方法时 , 表示该方法不能被子类重写 。例如:public final void myMethod() {} 。
  • 当用于修饰变量时 , 表示该变量为常量 , 一旦赋值就不能再更改 。例如:public static final double PI = 3.141592653589793; 。
2、 finally: finally是一个关键字 , 通常与try和catch一起使用 , 用于处理异常 。finally块中的代码无论是否发生异常都会被执行 。这在需要确保某些资源(例如文件、网络连接等)被正确释放时非常有用 。例如:
try {// 可能抛出异常的代码} catch (Exception e) {// 处理异常的代码} finally {// 无论是否发生异常 , 都会执行的代码}3、 finalize: finalize是java.lang.Object类中的一个方法 。在Java中 , 所有类都隐式地继承自Object类 。finalize方法在垃圾回收器清理对象之前被调用 , 用于执行对象的清理工作 。一般情况下 , 不建议重写finalize方法 , 因为其执行时间和调用次数是不确定的 , 而且在Java 9及之后的版本中 , finalize方法已经被标记为废弃 。为了更好地管理资源 , 可以使用try-with-resources语句或显式地关闭资源 。
总结一下 , final、finally和finalize在Java中具有不同的含义和用途 。final用于修饰类、方法和变量 , 表示它们不能被改变;finally用于异常处理 , 表示无论是否发生异常都会执行的代码;finalize是Object类中的一个方法 , 用于在垃圾回收器清理对象之前执行清理工作 , 但在现代Java中不建议使用 。
BIO、NIO、AIO 有什么区别?在Java中 , BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)是三种不同的I/O处理模型 , 它们在处理输入输出时具有不同的特点和使用场景 。
1、 BIO(Blocking I/O): BIO是传统的Java I/O模型 , 也被称为同步阻塞I/O 。在这种模型中 , 当一个线程执行I/O操作时(如读取、写入等) , 该线程会被阻塞 , 直到操作完成 。这种方式简单易用 , 但在高并发场景下 , 性能较差 , 因为每个I/O操作都需要一个线程 , 线程数量过多可能导致资源耗尽 。
2、 NIO(Non-blocking I/O): NIO是Java 1.4引入的新I/O模型 , 也被称为同步非阻塞I/O 。NIO提供了基于缓冲区(Buffer)和通道(Channel)的新I/O抽象 。NIO允许线程在等待某个I/O操作完成时执行其他任务 , 从而提高了I/O操作的并发性 。NIO的主要特点包括:
  • 使用缓冲区进行数据操作 , 提高数据处理效率 。
  • 通过Selector(选择器)实现多路复用 , 允许一个线程同时处理多个Channel , 提高并发性能 。
  • 支持非阻塞I/O操作 , 减少线程等待时间 。NIO相较于BIO , 在高并发场景下具有更好的性能表现 。
3、 AIO(Asynchronous I/O): AIO是Java 1.7引入的异步非阻塞I/O模型 , 也称为NIO.2 。AIO采用了事件驱动的方式进行I/O操作 , 当一个I/O操作完成时 , 会通知相应的事件处理器进行处理 。AIO的主要特点包括:
  • 支持异步I/O操作 , 允许线程在等待I/O操作时执行其他任务 。
  • 通过CompletionHandler(完成处理器)实现事件驱动 , 当I/O操作完成时 , 会自动触发处理器进行处理 。AIO在某些场景下(例如大文件传输、低延迟要求等)具有更好的性能表现 。
总结一下 , BIO、NIO和AIO是Java中三种不同的I/O处理模型 。BIO是传统的同步阻塞I/O模型 , 适用于简单场景;NIO是同步非阻塞I/O模型 , 适用于高并发场景;AIO是异步非阻塞I/O模型 , 适用于大文件传输和低延迟要求的场景 。在实际应用中 , 根据需求和场景选择合适的I/O处理模型是非常重要的 。
说说Java中多态的实现原理Java中的多态(Polymorphism)是面向对象编程(OOP)的一个重要特性 , 它允许一个类的对象表现出多种形态 。多态的实现主要依赖于继承(Inheritance)和接口(Interface) , 通过方法重写(Override)和接口实现(Implementation)来实现 。


推荐阅读