Java面试题02

本文详细解释了Java中的抽象类特性、抽象方法与普通类的区别,探讨了final修饰的抽象类,比较了接口与抽象类,以及BIO、NIO和AIO三种IO模型。还介绍了Files类的常用方法,为开发者提供了处理文件和目录的工具。
摘要由CSDN通过智能技术生成

1.抽象类必须要有抽象方法吗?

        不一定。抽象类可以包含抽象方法,也可以不包含。抽象方法是没有实际实现的方法,需要 在子类中被具体实现。如果一个类中包含了至少一个抽象方法,那么这个类必须声明为抽象类。

2.普通类和抽象类有哪些区别?

        普通类可以被实例化,即可以创建对象。抽象类不能被直接实例化,只能被继承。普通类可 以有实例变量和方法,而抽象类可以包含抽象方法(可以有非抽象方法)。子类继承普通类时,不 需要实现父类的方法;但继承抽象类时,必须实现父类的抽象方法。

3.抽象类能使用 final 修饰吗?

        是的,抽象类可以使用final修饰。在Java中,final修饰的类不能被继承,无法有子类。如果 一个抽象类被final修饰,它就不能再被其他类继承,相当于限定了其子类的数量为零。

4.接口和抽象类有什么区别?

接口和抽象类都是用于实现多态性和定义规范。主要区别在于:

        一个类只能继承一个抽象类,但可以实现多个接口。

        抽象类可以包含抽象方法和非抽象方法,而接口只能包含抽象方法。

        抽象类可以有构造方法,接口不能有构造方法。

        接口中的字段默认为常量,而抽象类中可以有各种字段。

5.java 中 IO 流分为几种?

        Java中的IO流可以分为两类:字节流(Byte Stream)和字符流(Character Stream)。每 一类又分为输入流和输出流,共计四种类型:字节输入流、字节输出流、字符输入流和字符输出 流。

6.BIO、NIO、AIO 有什么区别?

        BIO(Blocking IO)是同步阻塞IO,每个连接都需要一个独立的线程处理,适合连接数较少 的情况;NIO(New IO,Non-Blocking IO)是同步非阻塞IO,通过单一线程管理多个连接,适合 高并发场景;AIO(Asynchronous IO)是异步非阻塞IO,适用于连接数较多且数据传输较大的情 况,通过异步事件通知方式工作。

在Java中,BIO、NIO和AIO是三种不同的输入输出(I/O)模型,它们在处理数据流的方式上有所不同。

  1. BIO (Blocking I/O)

    • 在BIO模型中,数据读写操作是阻塞的。这意味着在等待数据准备好进行读写操作时,线程会被阻塞。
    • 优点:实现简单。
    • 缺点:在高并发情况下,BIO的效率会降低,因为每个连接都需要一个线程进行处理,当连接数增加时,线程数也会大量增加,这将消耗大量的系统资源。
  2. NIO (Non-Blocking I/O)

    • 在NIO模型中,数据读写操作是非阻塞的。这意味着在等待数据准备好进行读写操作时,线程不会阻塞,可以继续执行其他任务。
    • 优点:可以更有效地利用系统资源,在高并发情况下表现较好。
    • 缺点:实现相对复杂,且对开发者的要求较高。此外,NIO并不能完全解决阻塞问题,它只是将阻塞点从数据读写操作转移到了Channel的Selector上。
  3. AIO (Asynchronous I/O)

    • 在AIO模型中,数据读写操作也是非阻塞的,但与NIO不同的是,AIO引入了Future的概念,当一个异步操作启动后,不需要等待它完成,可以继续执行其他任务。当操作完成后,可以通过Future获取操作结果。
    • 优点:可以更有效地利用系统资源,同时代码实现相对简单。
    • 缺点:虽然AIO在某些场景下表现优秀,但它并不是在所有场景下都表现得比NIO好,特别是在文件I/O方面。此外,AIO的普及度相对较低,一些旧的Java版本可能不支持。

在选择使用哪种I/O模型时,需要根据具体的应用场景和需求进行考虑。对于一些简单的、低并发的应用,使用BIO可能是一个不错的选择。对于高并发的场景,可能需要考虑使用NIO或AIO。同时,也要注意不同I/O模型的实现难度和适用场景。

7.Files 的常用方法都有哪些?

        Files类是java.nio.file包下用于操作文件和目录的工具类。其常用方法包括: readAllLines (读取所有行)、 write (写入数据到文件)、 createDirectory (创建目 录)、 copy (复制文件或目录)、 move (移动文件或目录)、 delete (删除文件或目录)、 isDirectory (判断是否是目录)、 isRegularFile (判断是否是普通文件)等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值