網(wǎng)站首頁 編程語言 正文
.NET的異常處理機(jī)制用來發(fā)現(xiàn)、處理運行時錯誤。如果開發(fā)人員沒有提供異常的處理機(jī)制,就默認(rèn)采用.NET的機(jī)制。
通常使用try...catch...finally捕獲異常。
try
{
//有可能發(fā)生異常
}
catch(Exception ex)
{
//處理異常
}
finally
{
//清理
}
- 如果沒有異常發(fā)生,就直接到finally語句塊中。
- finally語句塊是必須執(zhí)行的
- 這里的catch和finally語句塊是可選的。try語句塊后面可以跟1個或多個catch語句塊,try語句塊后面可以直接跟finally語句塊。
- Exception是所有異常的基類
使用.NET默認(rèn)異常處理機(jī)制捕獲異常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 100/a;
Console.WriteLine(result);
Console.ReadKey();
}
}
使用try...catch手動捕獲異常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("這里不會執(zhí)行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出現(xiàn)異常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
使用try...catch...finally手動捕獲異常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("這里不會執(zhí)行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出現(xiàn)異常");
}
finally
{
Console.WriteLine("放行吧,肯定會執(zhí)行到我這里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
可見,finally語句塊中的內(nèi)容一定會被執(zhí)行。
使用try...多個catch...finally手動捕獲異常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("這里不會執(zhí)行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("不能被0除的異常");
}
catch (Exception ex)
{
Console.WriteLine("異常");
}
finally
{
Console.WriteLine("放行吧,肯定會執(zhí)行到我這里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
可見,只要有一個catch語句塊捕獲到異常,其它catch語句塊不執(zhí)行。
使用try...catch(不帶括號,不帶參數(shù))手動捕獲異常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("這里不會執(zhí)行");
}
catch
{
Console.WriteLine("異常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
通過以上方法,可以捕獲任何異常。
try...catch手動捕獲拋出的異常
class Program
{
static void Main(string[] args)
{
try
{
throw new DivideByZeroException("除數(shù)不能為零");
}
catch (DivideByZeroException e)
{
Console.WriteLine("異常");
}
Console.WriteLine("最后想說的");
Console.ReadKey();
}
}
拋出異常本身并沒有顯示。
較高層次上下文捕獲較低拋出的異常
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;
}
}
}
在Calculate內(nèi)部拋出的異常,被更高層次的客戶端捕獲。
自定義異常
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);
}
}
總結(jié):
- .NET異常處理并不是標(biāo)準(zhǔn)的try...catch...finally,可以是很靈活的。
- 盡量在較低層次拋異常,在較高層次捕獲異常。
原文鏈接:https://www.cnblogs.com/darrenji/p/3965443.html
相關(guān)推薦
- 2022-01-06 ruoyi中生成的代碼表單,如果添加上傳功能-模板下載功能
- 2022-12-23 Android中Intent與Bundle的使用詳解_Android
- 2022-03-23 C語言實現(xiàn)簡單的三子棋游戲源碼_C 語言
- 2022-11-26 利用Python讀取Excel表內(nèi)容的詳細(xì)過程_python
- 2022-08-25 python自動化測試之破解圖文驗證碼_python
- 2022-04-14 Python報mongod:?error?while?loading?shared?librarie
- 2022-11-07 .NET?實現(xiàn)啟動時重定向程序運行路徑及?Windows?服務(wù)運行模式部署的方法_實用技巧
- 2022-12-11 docke-cli的調(diào)試環(huán)境搭建過程_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支