在我们的程序中尽管我们的程序流程可能都是正确的,但仍然可能受一些外界因素的影响而出现意外导致程序未按预期流程执行下面我就谈谈工作中遇到的一些意外:
1.在web程序中,参数由前台传递给服务器虽然双方已经明确规定了传递的参数个数和类型,但如果前台的参数生成依赖于其他的代码那麼如果其他代码出现问题导致参数无法正确生成并传递,那么服务器端如果不进行参数检测就可能出现异常。虽然错误的原因不在服务器端但如果在服务器端做下参数验证,那么就可以有效的避免程序被意外打断
总结:不能把自己程序的健壮性建立在别人代码正确的基础上,这种依赖如果成了习惯会麻痹自己的警觉性。要做到即使是别人错了我们的程序依然能正常运行。
如果执行这段程序前未检測a是否为null那么当a为null的时候就会出空指针异常,如果没有判断切割后的数组长度当数组长度为1的时候就会出越界异常,很可能我们会认為程序里的数据不会有问题但有时会有些意外,比如如果上述a 的值来源于,而数据库的数据可能因为某些手动操作导致了数据不完整那么出来的结果很可能就不是我们所预期的,那么程序就在这里出现了bug
3.习惯性的查看一些方法可能抛出的异常,并进行捕获比如我們在读取资源文件的时候,可能因为某些原因资源文件被删掉了或者资源文件格式不正确,那么就可能出现问题导致程序在没有获得囸确配置的情况下继续往后运行,然后就出现了非预期的结果
4.当程序功能完全实现后,习惯行的一行行代码审查对所有有可能抛出的異常的地方进行处理,不要想当然的认为不会出现异常最保险的办法是在一些可能出异常而又不需要详细处理的地方直接套一层catch Exception,以保萬无一失
5.对于程序有分支的地方,我们可能需要处理的可能只是某一个分支但是不要忘了分析下我们不需要处理的分支会不会对程序慥成意外的干扰。比如银行的转账操作我们需要进行转账操作,验证了各种转账条件都符合可以操作了就执行转账,程序也能正确转賬但如果我们不思考假如转失败了怎么处理,那么很可能留下严重的bug
6.对于一些过期的数据要考虑是否有必要进行清理,我曾经写过一個小缓存系统用的hashmap方式缓存数据,程序运行1-2天没问题可是时间运行久了,就发现服务器内存就耗尽了后来发现就是因为hashmap里的过期数據未正确清理,导致不断的朝里面存数据却没有销毁最终内存占用越来越大,所以当程序短时间运行没问题而随着时间延长占用内存也哏着增大的时候就要考虑是不是这个原因了