转:try-catch怎么用哪里用解释的很清楚
原文:http://blog.csdn.net/wsz1z154/article/details/7727224
throw new Exception(String, Exception)
throw new Exception(String)
throw是明确地抛出异常
MSDN:Exception (String, Exception) 使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 Exception 类的新实例。
在发现异常以后作一下记录异常信息然后在抛出异常,让客户知道有问题了,以便通知技术人员。因为程序异常以后就崩溃的机会很大,先记录问题下来再崩溃才行。
捕获异常以后,再抛出一个新的异常。再抛出新异常之前,你可以对前面捕获的异常做一些操作,比如记录日志、获取异常信息然后写到新异常中
int num = Convert.ToInt32(textBox1.Text);
try
{
if (num == 0)
{
throw new ArgumentNullException("出现零!");
}
if (num == 1)
{
throw new Exception("出现壹!");
}
}
catch (ArgumentNullException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
catch是用来处理错误,就是发生了错误时,会执行catch部分.注意:是"发生了错误时".
但是, 在没有发生错误时, 你自己想引发错误怎么办呢? 可以使用throw语句来手工引发一个错误.
比如上面这段程序, 你先画一个文本框,textBox1,一个按钮button1, 如果把这段代码放到button1的click事件里.
如果文本框中文本是0,引发一种错误,文本框文本是1时又引发另一种错误,并可采用不同的处理办法.
我认为catch块里通常对附异常有三种办法:一种办法是,什么也不做,catch语句里只有空语句;另一种办法是,用messagebox之类的通知异常;还有一种办法是,throw 一个new的异常。
用哪种办法取决于你希望如何处理这个异常。
如果你想直接通知用户,用messagebox之类的就好了
如果你想由调用这个函数的程序来处理,可以throw一个new
如果你希望你的程序出了“这个”异常还正常运行,就像什么也没发生一样,你可以空语句。
总之try catch是有意义和必要的,但你的程序如何catch就是你自己的想法喽。
一般来说没有必要明确的throw出一个异常,异常应该是因为程序本身运行的问题而产生的,但是有两种情况:
1. 测试的时候,比如说你不能真的模拟一个内存耗尽这个异常吧,那么只好明确地throw一个了。
2. 自定义的异常需要明确的throw出来,因为满足这个条件往往是我们自己制定的规则不满足了。
原文:http://blog.sina.com.cn/s/blog_5c52ae1b0100p1kb.html
throw new Exception C#
throw new Exception("自己写的抛出错误的原因").
用这句的是原因,我们已经知道有一个错误存在,然后用这个抛出错误的原因让使用这个代码的人知道这是为什么,这一般是做基础部分的人用的。
比较:
public doube 除法(double a,double b)
{
if(b==0)
{
throw new Exception("除数不能为0");
}
return a/b;
}
然后是别的程序员使用你的这段代码进行其他的开发,然后他们在测试的时候,是这么调用的除法(3,0),编译出错,这个程序员一看就知道“除数不能为0”,那他就知道,在使用这个方法的时候保证第二个参数不能为0。
答案补充
要是b==0;
if(b==0)
{
throw new Exception("除数不能为0");
}
就运行throw new Exception("除数不能为0");然后程序运行不下去了,原因有错误了。
return a/b,就不运行了。
答案补充
当然不一样了,messgaebox.show("内容")是弹出一个窗口,
throw new Exception()这个没有,不过可以用
try
{}
catch
{}
捕捉,然后做出其他的处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决