当前位置: 首页 >服务端 > C#各种异常处理方式

C#各种异常处理方式

.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。

 

通常使用try...catch...finally捕获异常。

try
{
//有可能发生异常
}
catch(Exception ex)
{
//处理异常
}
finally
{
//清理
}

○ 如果没有异常发生,就直接到finally语句块中。
○ finally语句块是必须执行的
○ 这里的catch和finally语句块是可选的。try语句块后面可以跟1个或多个catch语句块,try语句块后面可以直接跟finally语句块。
○ Exception是所有异常的基类

 

□ 使用.NET默认异常处理机制捕获异常

class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 100/a;
Console.WriteLine(result);
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

 

□ 使用try...catch手动捕获异常

class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

 

□ 使用try...catch...finally手动捕获异常

class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

可见,finally语句块中的内容一定会被执行。

 

□ 使用try...多个catch...finally手动捕获异常

class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("不能被0除的异常");
}
catch (Exception ex)
{
Console.WriteLine("异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

可见,只要有一个catch语句块捕获到异常,其它catch语句块不执行。

 

□ 使用try...catch(不带括号,不带参数)手动捕获异常

class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch
{
Console.WriteLine("异常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

通过以上方法,可以捕获任何异常。

 

□ try...catch手动捕获抛出的异常

class Program
{
static void Main(string[] args)
{
try
{
throw new DivideByZeroException("除数不能为零");
}
catch (DivideByZeroException e)
{
Console.WriteLine("异常");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

抛出异常本身并没有显示。

 

□ 较高层次上下文捕获较低抛出的异常

class Program
{
static void Main(string[] args)
{
Calculate c = new Calculate();
try
{
c.Divide();
}
catch (Exception e)
{
Console.WriteLine("捕获异常");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
public class Calculate
{
public void Divide()
{
try
{
int a = 0;
int result = 100/a;
}
catch (DivideByZeroException e)
{
throw;
}
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

在Calculate内部抛出的异常,被更高层次的客户端捕获。

 

□ 自定义异常

class Program
{
static void Main(string[] args)
{
try
{
throw new MyException("i am exception");
}
catch (Exception e)
{
Console.WriteLine("捕获到自定义异常了~~");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
public class MyException : Exception
{
public MyException(string str)
{
Console.WriteLine("这是我自定义的异常:" + str);
}
}

C#各种异常处理方式 _ JavaClub全栈架构师技术笔记

 

总结:
○ .NET异常处理并不是标准的try...catch...finally,可以是很灵活的。
○ 尽量在较低层次抛异常,在较高层次捕获异常。

作者:Darren Ji
来源链接:https://www.cnblogs.com/darrenji/p/3965443.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/112748.html

标签:异常处理
分享给朋友:

“C#各种异常处理方式” 的相关文章

pycharm安装教程,超详细 2022年05月16日 21:28:02
[Multimedia][TS]TS流的解析 2022年05月17日 20:41:26
[C#][控件]常用控件命名规范 2022年05月17日 20:45:24
linux yum命令详解 2022年05月19日 19:54:29
Java日志框架那些事儿 2022年05月19日 20:04:37
ubuntu 20.04修改数据源配置 2022年05月20日 10:09:56
飞算soflu软件机器人 2022年05月25日 22:23:09
Struts2 和 OGNL 2022年05月30日 23:11:17