首先理解一下受检异常与非受检异常:

 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计的没有问题通常就不会发生。受检异常与程序的上下文环境有关,仍然可能因使用问题而引发。java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求抛出未被捕获的运行时异常。

转自https://blog.csdn.net/troubleshooter/article/details/78354757

受检异常为什么要转化为非受检异常:https://blog.csdn.net/p106786860/article/details/11918773