今天的面试题,希望帮忙解答
被问及为什么要有try-catch。回答为是为了捕获异常。然后他就问为什么要捕获异常。我就一下子懵了,从没想过这个问题。。。然后草草的回家就说有些问题java虚拟机在编译器不会发现有异常,只有在执行期才会发现,所以需要程序员自己去捕获。不知道这个说的对不对。大家帮帮忙吧,先谢过
------解决方案--------------------捕获异常是因为有些方法在运行时是会出现异常的,所以要去捕获
------解决方案--------------------其实程序,说到底,就是人的思维的反应,人的生活中为啥有强烈的,防患于未然意识,也正是这种意识,在程序中体现出来就是所谓的try,catch.
------解决方案--------------------从哲学上说就是为了避免蝴蝶效应
------解决方案--------------------捕获异常的原因有很多种,列举如下:
1、重写的方法没有throws受检异常,如果重写的时候遇到受检异常必须捕获,然后做相应处理,如重写Runnable的run
2、将异常转换为用户友好的信息。比如捕获到
数据库异常后,重新抛出一个信息让常人易懂的异常
3、记录日志,即在catch里记录异常相关日志
4、如果出现的异常对外不重要且自己能处理,那么在catch中处理。比如转换某个配置文件的配置为int,结果转换失败,使用默认值。
5、作为业务逻辑的一部分(极不推荐)
6、一些重试操作里需要捕获异常,比如某个操作若失败,可重试3次,在循环中要捕获可能的异常以避免无法重试。
7、一些可以swallow的异常。比如实现一个closeConnectionQuietly,关闭ResultSet,Statement和Connection,如果调用它们的close出现异常,打算不去管它,就要catch掉它们。但一般会记录日志。
诸如此类,等等等等
------解决方案--------------------为了在出现异常之后进行一些操作啊 比如关闭资源 记录日志等
------解决方案--------------------处理程序在运行时出现的错误。。由于分层产生,确保异常在对应的层级获得捕获处理,而不影响到其他的层乃至整个程序的运行
------解决方案--------------------异常分为两种:
1、
RuntimeException2、Exception
对于RuntimeException就像是你开车时路上的小沙子,对于开车小沙子不会对开车造成什么影响,没有必要先要把沙子打扫干净再开车。所以没有不要捕获。
对于Exception,就像是在山间开车时山上掉下来的石头,我们没有能力阻止,但是对于这种意外,我们应该进行考虑(进行捕处理获)。