throw抛出异常又怎么样?应用程序还是中断了,throw到底怎么理解? 本帖最后由 x_4653 于 2010-11-24 08:50:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你怎么在已经捕获到异常,并准备进行相关处理的时候,还throw抛出异常的?throw抛出异常应该是前面抛出,catch里面应该是写处理异常的语句 catch了,又throw,跟没catch有什么区别。除非在TestExceptionFunction的调用的地方再catch一遍。 int i = 10; int j = 0; double vaule = 0.0; try { vaule = i / j; } catch (Exception e) { //throw 就是抛出异常,程序会在抛出后挂掉 //改为以下,不会挂掉 Console.WriteLine(e.Message);//e.ToString() } finally { Console.WriteLine("程序执行的出口"); } Console.WriteLine("the value is {0}", vaule); 既然throw了,你应该在外面去捕获这个异常。如果你没有进行捕获处理,那么系统帮你处理。 throw是抛出异常,需要你去处理这个异常,你不处理系统帮你,就中断了。 int i = 10; int j = 0; double vaule = 0.0; try { vaule = i / j; } catch (Exception e) { //throw 就是抛出异常,程序会在抛出后挂掉 //改为以下,不会挂掉 (e.Message);//e.ToString() } finally { Console.WriteLine("程序执行的出口"); } Console.WriteLine("the value is {0}", vaule); private void BuyProduct(Int32 productId){ try { } catch(ArgumentException ex) { throw new Exception(String.Format("在购买产品{0}的时候出错",productId),ex); //重新抛出,加一些有用的信息。 } catch(SqlException ex) { RefundProduct(productId); //退货,进行逆操作,实际中应该是用事务恢复,这里只是举个例子,说明catch块中,可以作一些恢复性工作 }} throw不中断程序还要他干嘛呢 捕获异常,不是让你仅仅throw用的。http://www.cnblogs.com/luminji/archive/2010/10/20/1823536.html 把throw e;删除即可。你不处理异常情况,只需在把catch里的内容清空就行。public static void TestExceptionFunction() { int i = 10; int j = 0; double vaule = 0.0; try { vaule = i / j; } catch (Exception e) { // throw e;//再怎么处理异常,程序还是会“断”执行不下去,到底怎么理解throw, } finally { Console.WriteLine("程序执行的出口"); } Console.WriteLine("the value is {0}", vaule); } 楼主把trycatch。throw好好看看。看看他们到底用来做什么的!try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。 你catch就是其他代码throw的异常。你什么都不做又抛一遍当然就交给系统了,程序就挂了呗。自己只throw不处理的情况,一般只在当你也搞不清异常是如何产生的,会不会产生,并且异常出现时不进行处理会导致比程序挂了更惨的事发生(比如数据一致性错误)的情况下,直接抛出,让程序完蛋了事。 楼主把trycatch。throw好好看看。看看他们到底用来做什么的!try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。 在try中抛出异常,不处理,系统可能会帮你进行些处理,catch中是抛出后,你可以进行异常处理,finally是释放资源等操作 应用程序中怎么写,Console.WriteLine()在这里确实使程序继续跑下去了,控制台中也看到了,比如在具体一个web项目中,一个窗体项目中类似的问题怎么处理? 但我见过的异常处理从来就是throw e完事。 这是你写程序的问题,如果你不try得话就直接崩溃了 抛出了异常,然后总得有东西接住~楼主看过的throw e的例子后面应该有接一些处理的语句的,最简单的应该是一些打印错误报告之类的~ 谈谈自己使用的体会:try{}使用的目的是把异常限制在一定范围内,并不致于继续蔓延,引起更大范围的异常。就象抓一个罪犯,危害最小的方式 是在现场抓到它。throw方式抛出异常时,往往用在没有足够手段向调用它的过程提供有效的不合逻辑的信息时采用。如:C#调用 了C++的dll很多情况下,你不可能给每个函数都加个参数(成功或失败,和错误信息)。 当你知道怎么处理exception的时候 比方加一些有用的上下文信息,log,notify 才做catch如果什么都不做,你就不要catch了,由上层调用代码来处理。上层可能知道怎么处理,比方它可以把不成功的代码再执行一遍,等等你这个例子可能有个全局的exception handling strategy Console.WriteLine(e.Message) 直接输出进行处理 这里第二个catch仍然要仿照第一个,在取消交易之后,封装原来的异常为新的自定义异常,然后继续抛出。 当程序异常时仅仅console.write之后(何况winform、webform之类的会忽略console.write)就让程序伪装成正常结束了,这种程序谁还敢用、还能维护它?当一个系统彻底混乱了,怎么查原因?因为底层有人命名异常了却装的没事人一样地隐藏了异常断点,这就无法调试软件bug了。 比如你一个程序中间某条语句调用TestExceptionFunction,那么它异常了,你的程序毫不知情地去执行这条语句的下一条语句? 但抛出异常之后,怎么让外面调用的函数停止?比如我这里有个函数try{执行一系列操作}catch{ 异常处理了}执行一系列后续操作怎么终止掉后续操作?如果我的try是在一个函数里,那我怎么终止掉函数被调用地方的后续操作? catch 该怎么写 开放得网络接口 将一个简单的JS转成C#,谢谢帮忙。 捕获赋值不规范的控件名问题 【??】关于写文件的问题 谁有sql2005的行记录缓存依赖的c#实例 C#中的反射 请教下怎么在子窗口控制主窗口中的控件 c# winform 多线程多文件上传 C#使用OLE操作DBF文件,插入datetime类型的值,在获取的时候只剩日期部分,时间部分变成了0 GDI+必看书:Addison.Wesley.Graphics Programming.with.GDI+.2003.chm 如何制作考试管理系统
除非在TestExceptionFunction的调用的地方再catch一遍。
int j = 0;
double vaule = 0.0;
try
{
vaule = i / j;
}
catch (Exception e)
{
//throw 就是抛出异常,程序会在抛出后挂掉 //改为以下,不会挂掉
Console.WriteLine(e.Message);//e.ToString()
}
finally
{
Console.WriteLine("程序执行的出口");
}
Console.WriteLine("the value is {0}", vaule);
如果你没有进行捕获处理,那么系统帮你处理。
int j = 0;
double vaule = 0.0;
try
{
vaule = i / j;
}
catch (Exception e)
{
//throw 就是抛出异常,程序会在抛出后挂掉 //改为以下,不会挂掉
(e.Message);//e.ToString()
}
finally
{
Console.WriteLine("程序执行的出口");
}
Console.WriteLine("the value is {0}", vaule);
private void BuyProduct(Int32 productId)
{
try
{ }
catch(ArgumentException ex)
{
throw new Exception(String.Format("在购买产品{0}的时候出错",productId),ex); //重新抛出,加一些有用的信息。
}
catch(SqlException ex)
{
RefundProduct(productId); //退货,进行逆操作,实际中应该是用事务恢复,这里只是举个例子,说明catch块中,可以作一些恢复性工作
}
}
http://www.cnblogs.com/luminji/archive/2010/10/20/1823536.html
你不处理异常情况,只需在把catch里的内容清空就行。public static void TestExceptionFunction()
{
int i = 10;
int j = 0;
double vaule = 0.0;
try
{
vaule = i / j;
}
catch (Exception e)
{ // throw e;//再怎么处理异常,程序还是会“断”执行不下去,到底怎么理解throw, }
finally
{
Console.WriteLine("程序执行的出口");
}
Console.WriteLine("the value is {0}", vaule);
}
try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。
try捕捉异常。catch人为自己处理异常比如你知道被除数不能为零假如为零了你就要在这里面处理了。throw叫主机处理异常,程序会中断一般不用。
应用程序中怎么写,Console.WriteLine()在这里确实使程序继续跑下去了,控制台中也看到了,比如在具体一个web项目中,一个窗体项目中类似的问题怎么处理?
但我见过的异常处理从来就是throw e完事。
try{}使用的目的是把异常限制在一定范围内,并不致于继续蔓延,引起更大范围的异常。
就象抓一个罪犯,危害最小的方式 是在现场抓到它。throw方式抛出异常时,往往用在没有足够手段向调用它的过程提供有效的不合逻辑的信息时采用。
如:C#调用 了C++的dll
很多情况下,你不可能给每个函数都加个参数(成功或失败,和错误信息)。
如果什么都不做,你就不要catch了,由上层调用代码来处理。上层可能知道怎么处理,比方它可以把不成功的代码再执行一遍,等等你这个例子可能有个全局的exception handling strategy
这里第二个catch仍然要仿照第一个,在取消交易之后,封装原来的异常为新的自定义异常,然后继续抛出。
当程序异常时仅仅console.write之后(何况winform、webform之类的会忽略console.write)就让程序伪装成正常结束了,这种程序谁还敢用、还能维护它?当一个系统彻底混乱了,怎么查原因?因为底层有人命名异常了却装的没事人一样地隐藏了异常断点,这就无法调试软件bug了。
比如你一个程序中间某条语句调用TestExceptionFunction,那么它异常了,你的程序毫不知情地去执行这条语句的下一条语句?
比如我这里有个函数try{
执行一系列操作}
catch
{
异常处理了
}
执行一系列后续操作怎么终止掉后续操作?
如果我的try是在一个函数里,那我怎么终止掉函数被调用地方的后续操作?