2019.03.28 读书笔记 关于try catch
2024-09-20 03:04:27
try catch 在不异常的时候不损耗性能,耗损性能的是throw ex,所以在非异常是,不要滥用throw,特别是很多代码习惯:if(age<0) throw new Exception("年龄不能小于0"),这种代码。
另外throw 有多种写法
try catch(ex) { throw ex; }这种代码是表示ex 已经被处理了,又重新抛出了ex异常,重置了错误信息,导致找不到真正的异常位置。
try catch { throw } 直接抛出
try catch(Exception){ throw} 如上
另外,如果如果实在需要增加异常说明,可以改成如下:
try catch(Exception ex){ throw new Excrption("连接失败!",ex) ;}这种形式会将原始异常一起抛出。
winform中的线程,需要用委托的形式将ex抛到UI线程,否则只会导致程序退出。
Thread t = new Thread((ThreadStart)delegate
{
try
{
throw new Exception("非窗体线程异常");
}
catch (Exception ex)
{
this.BeginInvoke((Action)delegate
{
throw ex;
});
}
});
t.Start();
finally不会因为调用堆栈中存在的异常而被终止,CLR会先执行catch块,然后再执行finally块
static void Main(string[] args)
{
Method3();
} static void Method3()
{
ClassShouldDisposeBase c = null;
try
{
c = new ClassShouldDisposeBase("Method3");
Method4();
}
catch
{
Console.WriteLine("在Method3中捕获了异常。");
}
finally
{
c.Dispose();
} } static void Method4()
{
ClassShouldDisposeBase c = null;
try
{
c = new ClassShouldDisposeBase("Method4");
throw new Exception();
}
catch
{
Console.WriteLine("在Method4中捕获了异常。");
throw;
}
finally
{
c.Dispose();
}
}
最新文章
- Golang Beego 分析(一)
- NSURLSession/NSURLConnection的上传文件方法(已做了更新)
- double-clicking
- asp.net生成PDF文件 (1)
- VC6.0 导入资源崩溃
- s nrmtyu,yi.sfn rt
- http协议之cookie标准RFC6265介绍
- 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法
- IP组播技术介绍及实现例子
- html5绘图
- Spark Submit 脚本
- Linux忘记密码常用的几种解决方法
- 获取cookie
- SpringMVC包括哪些组件
- linux 安装 nvm
- [我的阿里云服务器] —— WorkPress
- Intellij IDEA 2017 debug断点调试技巧与总结详解篇
- 【刷题】LOJ 6015 「网络流 24 题」星际转移
- SpringBoot启动器详解pom.xml
- Golang之hello,beego