论坛首页 Java企业应用论坛

关于异常的处理以及相关设计

浏览 12699 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-25  
      最近设计程序的时候,老抛出NullPointerException,ArrayOutOfIndexException异常,发现这些异常的抛出对程序的稳定性是有好处的。它可以防止程序崩溃。
     不过相信开发过程序的人应该对这些异常操作是很厌烦,有什么办法可以避免这些操作呢?
     什么时候抛出异常,什么应该在程序里抓住异常?
     比如你对一个对象的操作
    
java 代码
 
  1.    
  2. if(object == null)  
  3.      threws new NullPointerExcction("对象不应该为空");  
  4.   
  5.   
  6.   
  7. if(object == null)  
  8.      return;  
这两种方式在设计的时候经常使用,有些程序容许你对象为空的时候可以进行下一步操作,有些程序则强制要求上一步的环境一定要建立,比如对象步能为空,资源一定要存在等。

欢迎各位高手谈谈异常体系上设计的心得,
异常设计的好可以减少很多if,witch等语句。

那个用户登陆的例子来说吧。
记得以前写过程式编程的时的代码如下:
java 代码
 
  1. int isNotExist = 1;  
  2. int succes = 0;  
  3. int passwordError= 2;  
  4. int ,......  
  5.   
  6.   
  7. int login(){  
  8. ...................  
  9. ................  
  10. return i;  
  11. }  

采用异常处理时候
java 代码
 
  1. class UserNotFindExecption{  
  2. .........  
  3. }  
  4.   
  5. void login() throw Exception{  
  6. .........  
  7. throws new UserNotFindExecption()  
  8. }  

这两种设计方式就很考究你对异常的理解。
   发表时间:2006-12-25  
NullPointerException, ArrayOutOfIndexException 跟 UserNotFindExecption 完全不是一种类型的异常, 前者大多是参数不正确导致, 后者是业务异常, 怎么能混为一谈
0 请登录后投票
   发表时间:2006-12-25  
那么,在这个方法中
void login() throw Exception{   
.........   
throws new UserNotFindExecption()   
} 

如果登陆成功,会如何返回呢?
0 请登录后投票
   发表时间:2006-12-25  
成功不返回,
只是出错的时候抛出异常,由以后的程序去处理
比如我写了Service的login
在Action的login中去处理Service抛出来的异常

然后在Action具体改怎么做。
0 请登录后投票
   发表时间:2006-12-25  
Feiing 写道
NullPointerException, ArrayOutOfIndexException 跟 UserNotFindExecption 完全不是一种类型的异常, 前者大多是参数不正确导致, 后者是业务异常, 怎么能混为一谈


没别的意思,只是拿来做个例子,然后想看看高手们是怎么设计异常已经对异常的处理的
0 请登录后投票
   发表时间:2006-12-25  
这个好早以前说得已经很细了吧
记得我就是被google到的那个帖子勾引过来的
0 请登录后投票
   发表时间:2006-12-25  
好像我也读过,好像是关于怎么以样OO的。就在这个论坛里吧,查下
0 请登录后投票
   发表时间:2006-12-27  
稍微了解下EJB对异常设计方面的要求和规范,基本上就全都明白了。

一般的,系统设计里面要分为两种异常:系统异常和应用异常。前者以RuntimeException的子类实现,后者以Exception的子类实现。

遇到系统级别的问题(你的应用里面处理不了,比如:意外的IOException、SQLExcetpion)直接包装成RuntimeException的子类并抛出。在EJB这一层一旦发现RuntimeException事务就会自动会滚。

另外的,你可能会遇到应用级别的非正常情况,可能需要提示给当前用户或上层API,(比如:用户登录时可能会出现:用户名密码错误、当前用户已经登录、当前用户积分不足不允许再次使用...等等情况),这个时候,你需要定义自己的应用异常,并抛出给上层程序(很可能是UI层,他们catch后,根据当时的上下文,形成一个字符串以提示用户)。在EJB这一层你抛出Exception,事务依然会被成功提交。
0 请登录后投票
   发表时间:2006-12-27  
那么,在这个方法中
代码

   1. void login() throw Exception{    
   2. .........    
   3. throws new UserNotFindExecption()    
   4. }  


如果登陆成功,会如何返回呢?

其实,可以返回一个Session对象。里面描述了本次登录会话的数据(ID,权限,时间 等等)。
0 请登录后投票
   发表时间:2006-12-27  
在java版块搜索一下"checked"......
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics