你是不是这样写异常处理代码的呢?

时间:2022-08-08 02:10:10 

经常看到同事这样写代码:


DataSet QueryDB()
{
   DataSet ds=null;

   try
    {
         //do something
    }
    catch (Exception ex)
    {
         //这里要做日志记录
    }

    return ds;
}

这里有几个问题:

1:很明显,如果QueryDB方法发生了任何异常,客户端无法得知,例如客户端调用QueryDB方法,该方法返回了null,那这代表数据库里面没有这个数据呢?还是抛出了异常?

2:注释是不应该存在的,它应该被真实的日志记录代码给替代,例如Log.Write(ex);

3:该方法捕捉所有异常,这样任何异常都被捕获了,这对于开发很不方便,永远不要捕获你不能处理的异常。

4:为什么这样写代码??解释是:真实用户不希望看到错误信息,初听起来,好像有几分道理,试想没有哪个用户会用你的软件,然后老是抛出个异常什么的,但是这是部署之后的事情啊,而不是开发的程序员不希望看到异常啊。在开发的时候,如果能够看到详细的异常信息,那么可以很快的改正,修复Bug,何乐而不为之呢??

于是修改为如下:


DataSet QueryDB()
{
     DataSet ds = null;

     try
     {
           //do something
     }
     catch (Exception ex)
     {
          Log.Write(ex);
          throw ex;
      }

      return ds;
}

好了,现在异常总算被捕获了,并且也被成功了抛出来了。

这段代码还是有问题??

在catch语句块中,throw ex; 最好修改为throw;

因为在.net中,异常都是不可修改的,每一次异常被抛出的时候,异常的堆栈跟踪信息都会被重置,

Throw 不会重置堆栈跟踪信息,但是throw ex;会重置。所以为了更方便的查找异常的抛出位置,最好使用throw 语句,而不是throw ex;否则clr会认为异常是在catch语句块中抛出的。

顺便再说一句,不要捕获你不能处理的异常,如果希望将来用户看不到异常信息,

大可以使用AppDomain.或者Application的全局异常处理。

标签:异常处理代码
0
投稿

猜你喜欢

  • Unity实现注册登录模块

    2023-11-24 04:55:22
  • Spring MVC项目中log4J和AOP使用详解

    2022-11-16 08:36:29
  • Java通过jersey实现客户端图片上传示例

    2022-09-17 15:44:24
  • SpringBoot集成mybatis实例

    2023-03-09 16:57:01
  • mybatis foreach标签的使用详解

    2023-05-07 21:12:09
  • mybatis水平分表实现动态表名的项目实例

    2023-04-02 22:11:42
  • 浅谈Java线程并发知识点

    2021-10-20 13:11:13
  • 5种Android数据存储方式汇总

    2023-08-06 06:49:04
  • Spring的Aware接口实现及执行顺序详解

    2023-03-09 09:50:53
  • C语言字符串大小比较

    2022-06-02 14:15:17
  • 聊聊关于Java方法重写的反思

    2022-10-26 00:36:12
  • java二叉查找树的实现代码

    2022-08-12 02:36:43
  • android Watchdog 实现剖析

    2022-07-12 06:39:21
  • C#中的高阶函数介绍

    2022-12-05 02:41:46
  • JavaEE组件commons-fileupload实现文件上传、下载

    2022-11-13 13:54:20
  • 详解idea从git上拉取maven项目详细步骤

    2023-04-23 08:51:56
  • C# 字符串多行显示/文本换行以textbox为例讲解

    2022-02-02 06:35:28
  • C#实现简单屏幕监控的方法

    2023-07-31 10:29:25
  • 详解Java单元测试之Junit框架使用教程

    2022-03-06 02:55:56
  • Redis集群与SSM整合使用方法

    2023-07-02 02:17:05
  • asp之家 软件编程 m.aspxhome.com