微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java异常面试题


一、异常基本概念的了解

1. 什么是异常

异常,见名知意思,就是错误,不正确的意思。在java语言中,异常是Java提供的一种识别及响应错误的一致性机制。将程序发生的不正常情况称为 异常。

2. 异常的分类

2.1. Throwable

Throwable 是 Java 语言中所有错误与异常的超类(基类)。

Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常情况。

2.2 Error(错误

定义:Error 类及其子类。程序中无法处理的错误,表示运行应用程序中出现了严重的错误

2.3 Exception(异常)

定义:Exception 类及其子类。 程序本身可以捕获并且可以处理的异常。

2.3.1 运行时异常

RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常。

2.3.2 编译时异常

Exception 中除 RuntimeException 及其子类之外的异常。

在这里插入图片描述

2.4 异常还可以如下分类

2.4.1 检查异常

编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除 RuntimeException 及其子类外,其他的 Exception 异常都属于受检异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用方法签名中用 throws 关键字抛出,否则编译不通过。

2.4.2 非检查异常

编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获它,也没有使用throws抛出该异常,编译也会正常通过。该类异常包括运行时异常(RuntimeException极其子类)和错误(Error)。

在这里插入图片描述

3. Java异常处理

3.1 异常处理关键字

  • 抛出异常
    • try
    • catch
    • finally
try{
    // 可能产生异常的代码    
}catch(Exception e){
    // 异常处理方式1
}catch(Exception e){
    // 异常处理方式2
}
  • 处理异常
    • throw
    • throws
public void throwTest() throws Exception {
	throw new Exception();
}

3.2 异常处理分类

在这里插入图片描述

二、常见面试题

异常的父类及继承关系

  • Throwable
    • Exception(异常)
    • Error(错误

error 与 exception 的区别

  • error 系统级别的异常(错误
    • 通常指的是JVM虚拟机相关的错误(系统崩溃,内存不足,堆栈溢出),一旦发生就会终止。
  • exception 可以捕获处理的异常,出现错误,对其进行处理,程序可以继续正常运行。
    运行时异常:RuntimeException 及其子类
    编译时异常:不是 RuntimeException 及其子类的异常(Checked Exception),比如IOException

处理异常的方式有哪些

  • 抛出
    • throw
    • throws
  • 处理
    • try…catch…finally

throw 和 throws 的区别

  • throw:是指真实抛出一个异常
  • throws:声明可能抛出一个异常

区别:

  • throws 出现在方法的声明中;throw 出现在方法体中
  • throws 表示出现异常的一种可能性,但是并不一定会发生这种异常;throw 则表示抛出了异常,执行一定会抛出这种对应的异常

常见的异常

  • indexoutofboundsexception : 数组下标越界异常
  • NullPointException : 空指针异常
  • ClassCaseException : 数据类型转换异常
  • IllegalArgumentException : 非法参数异常
  • FileNotFoundException : 文件没有找到异常
  • ArithmeticException - 计算异常
  • SecurityException : 安全性异常
  • NumberFormatException : 字符串转换为数字异常
  • NoSuchMethodException : 方法不存在异常
  • IOException : IO 异常
  • sqlException : 数据库异常

final,fianlly,finalize 的区别

  • final:final 是最终的意思,可以修饰变量,方法,类;用于声明变量,方法和类,分别表示被其修饰的变量不可变,被其修饰的方法不可重写,被其修饰的类不可继承。
  • finally:异常处理机制中处理语句结构的一部分,try…catch 后面,表示必定会执行,我们常用的是关闭资源。
  • finalize:Object 类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。该方法更像是一个对象生命周期的临终方法,当该方法被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用方法并不会导致该对象“死亡”(可能不会马上执行,像是做了提醒动作),这是一个被动的方法(其实就是回调方法),不需要我们调用

try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally{}里的代码会不会被执行,什么时候被执行,在 return 前还是后?

会执行,在方法返回前执行
我们一般不会在 finally 中改变返回值,因为如果存在 finally 代码块,try 中的 return 语句就不会立即返回给调用方,而是记录下来,或者理解为作为一个临时变量存储下来;待 finally 语句块执行完毕后再向调用方返回值,如果这个值被修改就会返回修改后的值。

  • 持久更新中…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐