J2ee实际项目中的异常处理问题

william_yao 2014-01-23 02:16:16
最近在做项目时,被老大喷的狗血淋头。主要是代码的健壮性问题。由于是游戏公司,所以对代码的质量要求非常高,对数据的处理,连断电的情况都要考虑到。

被喷的主要一块就是对异常的处理。所以想向大家请教下,大家在实际工作中对于异常处理的一些经验?如何建立一个项目中的异常体系?希望能分享分享!实在是万分感谢。

比如,我举几个典型的例子。

在我们的项目中,如果我们有文件需要写到本地,那肯定要有一个FileOutputStream。当我们构造这个FileOutputStream时,FileOutputStream可能会抛出一个受检异常,FileNotFoundException.请问,这时候,我们该如何去处理?这个FileNotFoundException,大家可以去看看API,并不是说文件找不到。而是说,文件不存在,但是无法创建!或者无法打开!

上面这种情况,当程序中出现了,我们应该让我们的程序如何处理呢?记录一条日志?还是继续包装一个RuntimeException抛出?很有可能,我们的系统中有一条专门的线程负责写文件,这时候碰到这个异常。那线程已经无法执行下去了,这线程无法执行下去,系统还有必要执行下去么?

其实我想问的是,当我们碰到,程序无法靠代码自身解决的异常,我们该如何处理?

如何看完了,则非常感谢!希望大家踊跃讨论!这个实际开发中最经常碰到的问题了。我觉得。
小伙伴们快来啊!
...全文
490 点赞 收藏 16
写回复
16 条回复
william_yao 2014年01月25日
引用 15 楼 eastoneking 的回复:
我觉得看你的代码是做什么用的。 如果做的是基础功能,或者通用库,会在不同模块中调用。那么总的原则是抛,你可以直接抛,包装一下抛,包成RuntimeException抛。反正你不知道实际的情况,只能抛,让具体功能去根据自己的情况处理。 要是直接的功能,那就根据功能来看。能记录日志就记录,可以重做就重做,有默认值就用默认值......实在不行,就封成RuntimeException抛。 在最上层,一定要catch一下Throwable,做最后的善终。当然,这个我也经常忘。
我现在做的是一个后台管理系统,不是通用库。说实话,感觉能写通用库的都是大神啊!求大神私信QQ交流,如何写通用库。
回复 点赞
齐岳 2014年01月24日
引用 11 楼 yzw19932010 的回复:
引用 9 楼 qiyuexuel 的回复:
做好备份是第一位的,自定义异常 对特殊状况 没多大用处吧
求举一些实际例子,稍微详细点讲讲备份的技巧。合适备份,何时在异常中利用备份。感谢~
简单点的临时备份, 在程序启动时,先检查是否有未处理备份文件,采用关键字对不同命令或数据执行相应操作---恢复过程 程序正常执行时,针对不同操作在本地同步生成临时备份文件(相当于日志),---工作过程 如果程序正常关闭,则保存数据后删除本次生成的备份文件,---正常结束 如果中途断电或其他非程序错误,则本地的备份文件不会消失,下次启动再检查,---异常处理
回复 点赞
临碣 2014年01月24日
我觉得看你的代码是做什么用的。 如果做的是基础功能,或者通用库,会在不同模块中调用。那么总的原则是抛,你可以直接抛,包装一下抛,包成RuntimeException抛。反正你不知道实际的情况,只能抛,让具体功能去根据自己的情况处理。 要是直接的功能,那就根据功能来看。能记录日志就记录,可以重做就重做,有默认值就用默认值......实在不行,就封成RuntimeException抛。 在最上层,一定要catch一下Throwable,做最后的善终。当然,这个我也经常忘。
回复 点赞
比特零 2014年01月24日
从用户干预的角度出发,把异常分成两种:用户可干预、用户干预无效,这两种异常大类。 对于用户可干预异常,通过友好的提醒,让用户通过特定的步骤或者修改操作内容、步骤的方式使操作继续。 对于用户干预无效的异常,则系统记录出错的位置、当时的状态信息,以有效的方式反馈;然后只能对用户抱歉退出了。 在系统框架中可以自行封装这两种大的异常种类,各异常出现时封装为这两种大类后抛出。
回复 点赞
花谢尊前不敢香 2014年01月23日
引用 6 楼 yzw19932010 的回复:
[quote=引用 5 楼 fangmingshijie 的回复:] 异常处理,要有备份和回复数据的能力。
求版主说的稍稍详细点。保证数据一致性,这个大的概念我有。或者,有木有什么好的相关的书推荐下?或者是相关的文章什么的?感谢了~[/quote] 比如异常出现了,首先确保别人输入的数据(未保存到数据库的)备份下来。异常恢复后及时插入数据库。 书籍没有。
回复 点赞
william_yao 2014年01月23日
引用 5 楼 fangmingshijie 的回复:
异常处理,要有备份和回复数据的能力。
求版主说的稍稍详细点。保证数据一致性,这个大的概念我有。或者,有木有什么好的相关的书推荐下?或者是相关的文章什么的?感谢了~
回复 点赞
花谢尊前不敢香 2014年01月23日
异常处理,要有备份和回复数据的能力。
回复 点赞
coolbamboo2008 2014年01月23日
自定义吧 当然要有专门的异常处理,不能太不友好
回复 点赞
ylovep 2014年01月23日
try catch ,当然也可以自己定义一些异常。游戏没设计没接触。 web的话可以弄一个过滤器拦截所有异常统一抛到友好界面。
回复 点赞
灰太狼的太太太爷爷 2014年01月23日
对于游戏,肯定是高并发的,如果一个线程出现了异常,不可能让系统也停掉吧?就像其中一个游戏玩家出问题了,系统如果挂了,那其他玩家怎么办???所以一个线程出问题了,系统不可能停的。。。
回复 点赞
william_yao 2014年01月23日
引用 2 楼 ylovep 的回复:
try catch ,当然也可以自己定义一些异常。游戏没设计没接触。 web的话可以弄一个过滤器拦截所有异常统一抛到友好界面。
有没有一些web的demo,是通过过滤器统一处理异常的,给我参考参考。谢谢了~
回复 点赞
william_yao 2014年01月23日
引用 9 楼 qiyuexuel 的回复:
做好备份是第一位的,自定义异常 对特殊状况 没多大用处吧
求举一些实际例子,稍微详细点讲讲备份的技巧。合适备份,何时在异常中利用备份。感谢~
回复 点赞
william_yao 2014年01月23日
引用 7 楼 fangmingshijie 的回复:
[quote=引用 6 楼 yzw19932010 的回复:] [quote=引用 5 楼 fangmingshijie 的回复:] 异常处理,要有备份和回复数据的能力。
求版主说的稍稍详细点。保证数据一致性,这个大的概念我有。或者,有木有什么好的相关的书推荐下?或者是相关的文章什么的?感谢了~[/quote] 比如异常出现了,首先确保别人输入的数据(未保存到数据库的)备份下来。异常恢复后及时插入数据库。 书籍没有。[/quote]备份确实是非常重要,今天写代码中,深感处理异常时备份的重要性。感谢版主的指点~
回复 点赞
齐岳 2014年01月23日
做好备份是第一位的,自定义异常 对特殊状况 没多大用处吧
回复 点赞
爱跳舞的铅笔头 2014年01月23日
无法考代码自身解决的异常那就友好地显示出来吧,比如物理环境导致的异常,我们没有办法控制的。
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告