Exception 使用投掷有什么用处?还有捕获?
据我所知,抛出导致异常。 它看起来可以用来测试您的Exception 使用投掷有什么用处?还有捕获?,exception,Exception,据我所知,抛出导致异常。 它看起来可以用来测试您的catch异常 它有什么好处/用途?为什么要故意导致异常 为什么在catch中使用throw?似乎它捕获异常只是为了再次引发异常 try { //blah } catch { throw; } 异常是错误处理的机制。例如,您可能会抛出异常,以指示webservice调用已超时,或者向方法提供了错误的输入。其思想是,调用代码知道如何处理这些异常,并能优雅地处理它们——可能是在输入错误的情况下修复错误(通过提示用户),或者通过
catch
异常
- 它有什么好处/用途?为什么要故意导致异常
- 为什么在
中使用catch
?似乎它捕获异常只是为了再次引发异常throw
try { //blah } catch { throw; }
- 异常是错误处理的机制。例如,您可能会抛出异常,以指示webservice调用已超时,或者向方法提供了错误的输入。其思想是,调用代码知道如何处理这些异常,并能优雅地处理它们——可能是在输入错误的情况下修复错误(通过提示用户),或者通过第二次尝试调用
catch
块是您处理错误的地方,在某些情况下,您可能希望在运行的方法中执行一些本地清理,但是您仍然需要将错误报告给调用方法,因此您再次抛出异常(或者抛出不同的、可能更通用或特定的异常)然后在调用代码中处理。异常是错误处理的机制。例如,您可能会抛出异常,以指示webservice调用已超时,或者向方法提供了错误的输入。其思想是,调用代码知道如何处理这些异常,并能优雅地处理它们——可能是在输入错误的情况下修复错误(通过提示用户),或者通过第二次尝试调用
catch
块是您处理错误的地方,在某些情况下,您可能希望在运行的方法中执行一些本地清理,但是您仍然需要将错误报告给调用方法,因此您再次抛出异常(或者抛出不同的、可能更通用或特定的异常)然后在您的呼叫代码中进行处理。Description
您可以这样做,例如,记录一些东西,并将异常返回给调用方法/程序集
您可以处理异常并向调用方发出异常发生的信号,而不是返回指示方法是否成功的布尔值
这对于单元测试和其他测试非常有用
样品
描述
您可以这样做,例如,记录一些东西,并将异常返回给调用方法/程序集
您可以处理异常并向调用方发出异常发生的信号,而不是返回指示方法是否成功的布尔值
这对于单元测试和其他测试非常有用
样品
这样做会保留堆栈跟踪。在您的示例中,这是没有用的,但是,您可以捕获异常,记录它,然后重试,以便异常冒泡出来,由更高级别的代码处理。这样做可以保留堆栈跟踪。在您的示例中,它没有用处,但是,您可以捕获异常,记录它,然后重新刷新,以便异常冒泡出来,由更高级别的代码处理。throw代码>重新引发当前异常。它用于当您希望捕获异常并自己进行一些处理,但在其他情况下仍然希望该异常或多或少地传播,就好像您从未捕获它一样
不同之处在于(在只允许您说throw;
,如C#)的语言中,当您重新抛出异常时,原始堆栈跟踪基本保持不变。(它包括重新触发异常的行,而不是在相应的try
块中发生异常的行,但在其他情况下,整个堆栈跟踪将保留。)如果说抛出捕获的异常代码>,它通常被视为从那里抛出一个全新的异常——现有的堆栈跟踪被删除,新的堆栈跟踪从此点开始代码>重新引发当前异常。它用于当您希望捕获异常并自己进行一些处理,但在其他情况下仍然希望该异常或多或少地传播,就好像您从未捕获它一样
不同之处在于(在只允许您说throw;
,如C#)的语言中,当您重新抛出异常时,原始堆栈跟踪基本保持不变。(它包括重新触发异常的行,而不是在相应的try
块中发生异常的行,但在其他情况下,整个堆栈跟踪将保留。)如果说抛出捕获的异常代码>,它通常被视为从那里抛出一个全新的异常——现有的堆栈跟踪被删除,新的堆栈跟踪从此点开始。这是.Net代码中的常见模式。当调用方希望记录、包装或对异常作出反应,然后将异常传递回调用方时,可以使用它。比如说
try {
SomeFunction();
} catch {
CloseMyResource();
throw;
}
throw
vsthrow exceptionVariable
的优点是throw
保留原始堆栈跟踪。下一个捕获异常的人将看到原始堆栈跟踪。这主要是为了跟踪深层调用堆栈中的错误 这是.Net代码中的常见模式。当调用方希望记录、包装或对异常作出反应,然后将异常传递回调用方时,可以使用它。比如说
try {
SomeFunction();
} catch {
CloseMyResource();
throw;
}
throw
vsthrow exceptionVariable
的优点是throw
保留原始堆栈跟踪。下一个捕获异常的人将看到原始堆栈跟踪。这主要是为了跟踪深层调用堆栈中的错误 如果您想在此处执行一些日志记录或进行一些清理,但仍希望调用函数位于调用堆栈的更高位置,以处理相同的异常,则将重新引发相同的异常
更典型的用途是:
try {
// ...
} catch (EmailException ex) {
SMS.AlertError("Email is not working", ex);
throw;
}
如果您抛出ex
,则您将
try {
// ...
} catch (Exception ex) {
WorkFlowProblems.Add(new OrderNotSentException("Email did not work", ex));
View.ShowError("Could not send order!");
}
Foo foo = null;
try{
foo = new Foo();
}catch(FooException fe){
//here you can find out if Foo didn't get instantiated as you wanted it to
}
//and here you can test if foo is still null.