在代码编写过程中,总感觉自己在处理异常时不那么合适,在网上找了些文章看了看。记录如下。
下面想一下异常处理的目的,是为了处理各种错误,让程序继续执行。现在可以想一下throw的使用,我们要尽可能多的在里层处理异常,而不是简单的抛出,让外层处理。如果是这样里层出现任何一个问题,异常就会被抛到main,程序就退出了。正常的做法是在内层处理,直到main中,还没法处理时再退出程序。当然得保证业务的正常。
- 既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予理睬。
可以做如下选择:
1)处理异常。针对该异常采取一些行动,例如修正问题、提醒某个人或进行其他一些处理,要根据具体的情形确定应该采取的动作。再次说明,调用printStackTrace算不上已经“处理好了异常”。
2)重新抛出异常。处理异常的代码在分析异常之后,认为自己不能处理它,重新抛出异常也不失为一种选择。
3)把该异常转换成另一种异常。大多数情况下,这是指把一个低级的异常转换成应用级的异常(其含义更容易被用户了解的异常)。
4)不要捕获异常。 - 在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。不要试图处理所有可能出现的异常。
处理可能出现的异常,而不是所有异常,对于不希望直接处理的异常可以抛出。 - 保证所有资源都被正确释放。充分运用finally关键词。
- 在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。
- 尽量减小try块的体积。
这样出现异常时找起来不容易 - 全面考虑可能出现的异常以及这些异常对执行流程的影响。
对处理了一部分数据,中间出现异常的,就会出现数据不完整的情况。较为理想的处置办法是向输出设备写一些信息,声明数据的不完整性;另一种可能有效的办法是,先缓冲要输出的数据,准备好全部数据之后再一次性输出。
下面想一下异常处理的目的,是为了处理各种错误,让程序继续执行。现在可以想一下throw的使用,我们要尽可能多的在里层处理异常,而不是简单的抛出,让外层处理。如果是这样里层出现任何一个问题,异常就会被抛到main,程序就退出了。正常的做法是在内层处理,直到main中,还没法处理时再退出程序。当然得保证业务的正常。