Java经典面试题汇总:异常

 更新时间:2021年07月21日 09:28:37   作者:让程序飞  
本篇总结的是Java异常相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢

1. Java的异常机制

Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

2. Java如何自定义异常?

自定义异常类只需从Exception类或者它的子类派生一个子类即可。自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。

public class BizException extends Exception {
    //默认构造器
    public BizException() {
    }
    public BizException(String message) {
        super(message);
    }
}

3. throw 和 throws 的区别?

throw:是真实抛出一个异常。

throws:是声明可能会抛出一个异常。

4. Java 中被检查的异常和不受检查的异常有什么区别?

被检查的异常应该用 try-catch 块代码处理或用 throws 关键字抛出,不受检查的异常在程序中不要求被处理或用 throws 抛出。

5. final、finally、finalize 有什么区别?

final:是修饰符,如果修饰类,此类不能被继承;如果修饰方法和变量,则表示此方法和此变量不能在被改变,只能使用。

finally:是 try{} catch{} finally{} 最后一部分,表示不论发生任何情况都会执行,finally 部分可以省略,但如果 finally 部分存在,则一定会执行 finally 里面的代码。

finalize: 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法

6. try-catch-finally 中哪个部分可以省略?

try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同时省略, 也就是说有 try 的时候,必须后面跟一个 catch 或者 finally。

7. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

finally 一定会执行,即使是 catch 中 return 了,catch 中的 return 会等 finally 中的代码执行完之后,才会执行。

8. Java 中什么时候使用断言?

断言在开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本、关键的正确性,断言检查通常在开发和测试时开启,为了保证程序的执行效率,在软件发布后断言检查通常是关闭的,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true,如果表达式的值为 false 则系统会报告一个 AssertionError。

9. 运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

10. 你平时在项目中是如何对异常进行处理的?

(1)尽量避免出现runtimeException 。比如对于可能出现空指针的代码。带使用对象之前一定要推断一下该对象是否为空。必要的时候对runtimeException也进行try catch处理。

(2)进行try catch处理的时候要在catch代码块中对异常信息进行记录,通过调用异常类的相关方法获取到异常的相关信息,返回到web端,给到给用户良好的用户体验。

11. 常见的异常类有哪些?

  • NullPointerException 空指针异常
  • ClassNotFoundException 指定类不存在
  • NumberFormatException 字符串转换为数字异常
  • IndexOutOfBoundsException 数组下标越界异常
  • ClassCastException 数据类型转换异常
  • FileNotFoundException 文件未找到异常
  • NoSuchMethodException 方法不存在异常
  • IOException IO 异常
  • SocketException Socket 异常

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 从零开始Mybatis连接数据库的方法

    从零开始Mybatis连接数据库的方法

    这篇文章主要介绍了Mybatis连接数据库的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • MyBatis使用嵌套查询collection和association的实现

    MyBatis使用嵌套查询collection和association的实现

    本文详细介绍了使用MyBatis框架进行数据库操作时,如何利用collection标签实现一对多的嵌套查询和使用association标签实现一对一的嵌套查询,感兴趣的可以了解一下
    2024-09-09
  • Java 关于时间复杂度和空间复杂度的深度刨析

    Java 关于时间复杂度和空间复杂度的深度刨析

    算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小
    2021-11-11
  • Java中的Opencv简介与开发环境部署方法

    Java中的Opencv简介与开发环境部署方法

    OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与边缘检测、图像特征提取与描述等应用,本文介绍Java中的Opencv简介与开发环境部署方法,感兴趣的朋友一起看看吧
    2025-01-01
  • spring与disruptor集成的简单示例

    spring与disruptor集成的简单示例

    本篇文章主要介绍了spring与disruptor集成的简单示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Java实现abc字符串排列组合

    Java实现abc字符串排列组合

    这篇文章主要为大家详细介绍了JAVA实现abc字符串的排列组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片

    利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片

    这篇文章主要为大家详细介绍了利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)

    Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)

    本文是小编给大家带来的java各种排序算法知识,包括插入排序、选择排序算法、冒泡排序算法,代码简单易懂,需要的朋友可以参考下
    2016-08-08
  • JAVA Iterator 转成 List 的操作

    JAVA Iterator 转成 List 的操作

    这篇文章主要介绍了JAVA Iterator 转成 List 的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • MyBatis实现动态SQL更新的代码示例

    MyBatis实现动态SQL更新的代码示例

    本文博小编将带领大家学习如何利用 MyBatis 拦截器机制来优雅的实现这个需求,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07

最新评论