闲话闲说——关于异常

前几天,公司的一个漂亮MM下午的时候突然脚就痛了,然后问她什么回事,她说她自己也不知道是为什么,脱了鞋一看,应该是纽到脚了,肿得很厉害。世界上的很多事情都是这样,你不去注意,不去想,它们几乎都是那样的熟悉,那样的一般,那样的正常。但是如果我们仔细的想想,或许就能悟出很多的道理来。假如我们的手被东西给割破了,流血了,我们就马上知道疼痛了,在大多数人眼中疼痛似乎不是个好东西。要是我们不会疼痛会不会很爽呢?答案是否定的。如果我们的手被割破了,我们不知道疼痛,那么我们就不会马上进行处理,结果肯定是出血过多而出现生命危险。我们有理由相信曾经有这样生物,受伤后却不没有知觉,终于经过漫长的自然选择,这些生物不存在了。所以,今天能看到这篇文章的人都是知道疼痛的。

上面的闲话说了这么多,我们现在进入正题。假如你的程序也如那些没有知觉的人一样,结果会怎样呢。不能否认程序在运行中一定会出现异常,如果程序出现了异常,我们却丝毫不能觉察到,时间一久,里面的数据的完整性一定会遭到破坏。很多新手,很怕异常,于是来个了很大的Try,然后catch下,里面什么都不做。这种做法很不推荐,既然捕获了异常,就要对它进行适当的处理。有异常出现,就说明程序在运行中出现了技术上的或者业务上的错误。异常的意图是让你知道发生了错误,而不是让你难堪。

来看段常见的代码:
                int test = 0;
                int result = 9 / test;
运行后出现异常:试图除以零。好丢人啊!改下

            try
            
{
                
int test = 0;
                
int result = 9 / test;
            }

            
catch
            
{
            }
别人看不到异常了。可是事实上我们程序确实出现了异常,我们不能自欺欺人。
try
            
{
                
int test = 0;
                
int result = 9 / test;
            }

            
catch (System.DivideByZeroException ex)
            
{
                
throw new DemoException(123"用户试图输入被除数'0',进行除法运算");//重新包装,冒泡
            }

            cath(DemoException ex)
        
{
                 
//假设这个异常我们能处理,就在这里直接处理了   
            }

            
catch (Exception ex)
            
{
                
throw new DomoException(000,ex);
            }
不但我们要善于利用.net的异常,也要学会自己产生异常。如:
publi int Age
{
  
get{return _Age;}
  
set
{
  
if(value<0)
    _Age
=0;
  
if(value>55)
    
throw new InputEmployeeException("年龄已经超过退休年龄");
  _Age
=value;
}

}
说到异常,很多人都知道要把异常log起来。主要原因就是屏蔽这些技术,让客户看到友好的提示,而将这些异常留给我们,以便我们更好的重构或者维护我们的程序。
posted @ 2008-04-26 23:09  BigRain  阅读(252)  评论(0编辑  收藏  举报