`
阅读更多

这两者的主要不同在于输出的stack trace上:

  • 如果你直接使用throw;,那么stack trace就和根本不存在这个catch块的时候一样,显示错误根源是真正抛出异常的地方。
  • 如果你使用throw ex;,那么stack trace就认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,这时候stack trace就把throw ex;当作错误根源了。

 显然,后者会让stack trace的信息量少了,增加了追踪错误来源的难度,所以最好不要这样做。如果你要进行catch,然后你又要让异常继续冒泡,除了throw ex;以外你还有另外一个选择:
try
{
  MethodThatThrowsException();
}
catch (Exception ex)
{
  throw new Exception("oops!", ex);
}

这时候,你就将原本的异常封装进了新抛出的异常中,而stack trace会自动认为内部异常是导致当前异常的原因,也就会把内部异常的stack trace也递归显示出来。

有些人常用的方式是
try
{
  MethodThatThrowsException();
}
catch (Exception ex)
{
  throw new Exception("一个未知异常之类的话");
}
如果这样处理就等于把错误屏蔽掉了,这样上层无法得知此处发生了什么异常,所以异常的得理最好按照上面的两种方法
一种是直接重抛。另一种是进行封装。

今天又以实际的代码测试了
1.throw;
2.throw ex;
3.throw new Exception("");
4.throw new Exception("",ex);

这四种异常重抛。。。总结如下(在.net 1.1环境下)
只有throw new Exception("",ex)可以直接定位到发生异常错误代码的地方,其它的无法定位到,只能定位到异常抛出的地方。
throw new Exception("")完全吞掉异常。只显实Exception中的信息。。
throw和throw ex完全一样,没有区别,都是可以正常显示异常信息,但是不定们到异常发生的代码,只定到抛出异常这里。

所以throw,throw ex,throw new Exception("",ex)三种基本没有问题,在写类库这类代码,不要使用throw new Exception("")这样的方式,他会完全吞掉异常,上层调用代码完全不知道发生什么异常。
其它三种方式使用个人认为差别不在。不过throw new Exception("",ex)可以加上自定异常信息。方便判断错误

分享到:
评论

相关推荐

    java异常总结

    它提供了一种方法来响应错误条件,并且能够有效地管理程序运行时可能出现的各种异常情况。Java中的异常主要分为两大类:检查性异常(Checked Exception)和非检查性异常(Unchecked Exception)。 - **检查性异常**...

    C++异常处理总结

    C++异常处理总结 C++语言提供了异常处理机制,用于处理程序中的错误和异常情况。异常处理机制可以使程序结构更清晰、更健壮,并且可以防止程序崩溃。下面是C++异常处理机制的核心要点: 1. 如果使用普通的处理方式...

    java常见异常总结

    为了更好地理解和处理这些异常,本文将详细介绍几种常见的Java异常类型及其处理方法。 #### 1. `java.lang.NullPointerException` - **异常概述**:`NullPointerException`是Java中最常见的运行时异常之一,它发生...

    异常处理.pdf

    Java异常机制是Java语言的一种错误处理方式,它提供了一种标准的方法来处理程序运行时可能出现的错误。通过异常处理,我们可以将正常业务代码和异常处理代码分开,使程序的逻辑更清晰,增强程序的健壮性。 异常机制...

    Net中获取IP信息的几种方法

    ### .NET中获取IP信息的几种方法 在.NET框架中,获取IP地址是常见的需求之一,无论是为了统计访问来源、安全验证还是其他目的。本文将详细介绍.NET中获取IP信息的几种常见方法及其应用场景。 #### 一、ASP.NET内置...

    Java中异常打印输出的常见方法总结

    "Java中异常打印输出的常见方法总结" Java中异常打印输出的常见方法总结中,异常打印输出是Java应用中的警报器,帮助我们快速定位问题的类型以及位置。在项目中,正确使用异常打印方法是非常重要的,但是在实际...

    总结了一下JAVA中常见的几种RuntimeException

    以下是对给定文件中提到的几种常见`RuntimeException`的详细解析: 1. **`NullPointerException` - 空指针引用异常** 当尝试在`null`值上执行操作时,就会抛出`NullPointerException`。这通常是由于变量未被正确...

    Java中常见异常类型及分析.pdf

    以上介绍了Java中常见的几种异常类型及其产生原因和解决方法。掌握这些异常的处理技巧对于编写高质量、可靠的Java应用程序至关重要。在实际开发过程中,应始终遵循最佳实践,确保代码健壮性和鲁棒性。

    Java方法继承、方法重载、方法覆盖总结

    3. **异常声明不能更大**: 子类覆盖的方法抛出的异常类型不能比父类的方法更多或更大。 4. **静态方法不可被覆盖**: 在Java中,静态方法是不能被覆盖的,因为静态方法与类绑定而不是与对象绑定。 5. **最终方法...

    Python使用lambda抛出异常实现方法解析

    本文将详细介绍如何在Python中使用`lambda`函数来实现抛出异常的功能,并探讨几种不同的实现方法及其适用场景。 #### 背景与问题描述 假设我们需要创建一个函数,该函数的作用仅仅是抛出一个异常。这种需求在某些...

    C#线程同步的几种方法总结

    以下是对C#中几种线程同步方法的详细说明: 1. **volatile关键字** volatile是一个轻量级的同步机制,它主要用来修饰字段,确保所有线程都能看到最新的值。volatile的作用是防止编译器优化,使得变量的读写操作...

    Android编程实现异步消息处理机制的几种方法总结

    本文实例讲述了Android编程实现异步消息处理机制的几种方法。分享给大家供大家参考,具体如下: 1、概述 Android需要更新ui的话就必须在ui线程上进行操作。否则就会抛异常。 假如有耗时操作,比如:在子线程中下载...

    Python中创建字典的几种方法总结(推荐)

    ### Python中创建字典的几种方法总结 在Python编程中,字典是一种非常重要的数据结构,它以键值对的形式存储数据,具有高效查找的特点。本文将详细介绍在Python中创建字典的五种常见方法,并对每种方法的适用场景...

    详解python中自定义超时异常的几种方法

    本文将介绍如何在Python中自定义超时异常的几种方法。 ### 使用 threading 模块 一种处理超时异常的方法是使用 `threading` 模块。基本思路是将耗时的操作放在一个单独的线程中执行,主线程通过 `join()` 方法等待...

    得到文档路径的几种方法

    ### 得到文档路径的几种方法 在计算机编程中,获取文件或目录的路径是非常常见的需求之一。根据文件系统的特性,我们通常会遇到三种不同类型的路径:绝对路径、相对路径和标准路径(又称为规范路径)。本文将详细...

    java异常框架处理.pdf

    `throw`是用来抛出一个具体的异常对象,`throws`通常用于方法签名后,用来声明这个方法可能会抛出的异常类型,这样调用这个方法的上层代码就能知道可能需要处理哪些类型的异常。`try`则用来标记一块可能抛出异常的...

    Javascript 错误处理的几种方法

    本文将探讨在JavaScript中实现错误处理的几种方法,并解释其中的原理。 首先,浏览器不会抛出Error类型的异常。这意味着,如果我们在JavaScript代码中捕获到一个Error类型的异常,我们可以确定这是由用户代码中抛出...

    调试Python程序代码的几种方法总结

    本文将详细介绍几种调试Python程序的方法,主要基于Python2.x版本。 首先,最简单直接的方法就是使用print语句。这种方法通过打印出程序中某些关键变量的值,来观察程序的执行流程和变量的变化情况。比如在上面的...

Global site tag (gtag.js) - Google Analytics