zoukankan      html  css  js  c++  java
  • 闲话闲说——关于异常

    前几天,公司的一个漂亮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起来。主要原因就是屏蔽这些技术,让客户看到友好的提示,而将这些异常留给我们,以便我们更好的重构或者维护我们的程序。
  • 相关阅读:
    locust与jmeter在压测时的比较
    通过python异步通讯方式构建高并发压力测试工具
    开博寄语
    【linux】【root权限的掌控】
    【linux】【qt5界面】【系统托盘图标的实现】
    【win】【qt5】【本地网络相关信息,诸如ip,mac等】
    【win】【qt5】【qt汉化:输入框之右键英文变中文】
    【linux】【qt5】【qt程序防多开设置,通过设置共享内存实现,超短代码,超级有效】
    【qt】【QString的诸多操作】
    【linux】【qt5】【将linux下的qt程序打包发布(完全适用于中标麒麟)】
  • 原文地址:https://www.cnblogs.com/Linjianyu/p/1172623.html
Copyright © 2011-2022 走看看