Java异常面试题

Java中异常分为哪两种?

编译时异常和运行时异常。

异常的处理机制有哪几种?

  1. 异常捕捉:try…catch…finally。
  2. 异常抛出:throws。

如何自定义一个异常?

继承一个异常类,通常是Exception或者RuntimeException。

try…catch…finally,try里面有return,finally还执行吗?

执行,并且finally的执行早于try里的return。

说说Exception与Error包结构?

Java可抛出的结构分为三种类型:被检查的异常(CheckedException)、运行时异常(RuntimeException)和错误(Error)。

throw和throws的区别?

  1. 位置不同:throws用在函数上,后面跟的是异常类,可以跟多个;而throw用在函数内,后面跟的是异常对象。
  2. 功能不同:throws用来声明异常,让调用者知道该功能可能出现的问题,可以给出预先的处理方式。而throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者;throws表示出现异常的一种可能性,并不一定会发生这些异常。而throw则是抛出了异常,执行了throw则一定抛出了某种异常对象;两者都是消极处理异常的方式,只是抛出后者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

Error和Exception的区别?

  1. Error和Exception都是java错误处理机制的一部分,都继承了Throwable类。
  2. Exception表示的异常,异常可以通过程序来捕捉,或者优化程序来避免。
  3. Error表示的是 系统错误 ,不能通过程序来进行错误处理。

Java中的IO和NIO面试题

说说Java中的IO流?

  • 按照流的流向来划分,可以分为输入流和输出流。
  • 按照操作单元划分,可以分为字节流和字符流。
  • 按照流的角色划分,可以分为节点流和处理流。

Java的IO流都是从如下四个抽象基类派生出来的:

  1. InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  2. OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。

Java IO和NIO的区别?

NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO。

字节流和字符流的区别?

以字节为单位的输入输出数据,字节流按照8位传输;以字符为单位输入输出,字符流按照16位传输。