如何写出健壮的JAVA程序的一些心得。

         在我们的程序中,尽管我们的程序流程可能都是正确的,但仍然可能受一些外界因素的影响而出现意外导致程序未按预期流程执行。下面我就谈谈工作中遇到的一些意外:

        1.在web程序中,参数由前台传递给服务器,虽然双方已经明确规定了传递的参数个数和类型,但如果前台的参数生成依赖于其他的代码,那么如果其他代码出现问题导致参数无法正确生成并传递,那么服务器端如果不进行参数检测,就可能出现异常。虽然错误的原因不在服务器端,但如果在服务器端做下参数验证,那么就可以有效的避免程序被意外打断。

       总结:不能把自己程序的健壮性建立在别人代码正确的基础上,这种依赖如果成了习惯,会麻痹自己的警觉性。要做到即使是别人错了,我们的程序依然能正常运行。

       2.对于有字符串切割的地方或者取数组的地方,要养成检测null和长度的习惯,避免空指针和越界异常。

       比如下面的代码:String s = a.split(",")[1];

       如果执行这段程序前未检测a是否为null,那么当a为null的时候就会出空指针异常,如果没有判断切割后的数组长度,当数组长度为1的时候就会出越界异常,很可能我们会认为程序里的数据不会有问题,但有时会有些意外,比如,如果上述a 的值来源于数据库,而数据库的数据可能因为某些手动操作导致了数据不完整,那么出来的结果很可能就不是我们所预期的,那么程序就在这里出现了bug。

       3.习惯性的查看一些方法可能抛出的异常,并进行捕获。比如我们在读取资源文件的时候,可能因为某些原因资源文件被删掉了,或者资源文件格式不正确,那么就可能出现问题,导致程序在没有获得正确配置的情况下继续往后运行,然后就出现了非预期的结果。

       4.当程序功能完全实现后,习惯行的一行行代码审查,对所有有可能抛出的异常的地方进行处理,不要想当然的认为不会出现异常。最保险的办法是在一些可能出异常而又不需要详细处理的地方直接套一层catch Exception,以保万无一失。

       5.对于程序有分支的地方,我们可能需要处理的可能只是某一个分支,但是不要忘了分析下我们不需要处理的分支会不会对程序造成意外的干扰。比如银行的转账操作,我们需要进行转账操作,验证了各种转账条件都符合可以操作了,就执行转账,程序也能正确转账,但如果我们不思考假如转失败了怎么处理,那么很可能留下严重的bug。

       6.对于一些过期的数据要考虑是否有必要进行清理,我曾经写过一个小缓存系统,用的hashmap方式缓存数据,程序运行1-2天没问题,可是时间运行久了,就发现服务器内存就耗尽了,后来发现就是因为hashmap里的过期数据未正确清理,导致不断的朝里面存数据却没有销毁,最终内存占用越来越大,所以当程序短时间运行没问题而随着时间延长占用内存也跟着增大的时候就要考虑是不是这个原因了。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页