輕松學(xué)習(xí)C#的異常處理
異常是程序運(yùn)行中發(fā)生的錯(cuò)誤,異常處理是程序設(shè)計(jì)的一部分。錯(cuò)誤的出現(xiàn)并不總是編寫應(yīng)用程序者的原因,有時(shí)候應(yīng)用程序會(huì)因?yàn)榻K端用戶的操作發(fā)生錯(cuò)誤。無(wú)論如何,在編寫程序前,都應(yīng)該預(yù)測(cè)應(yīng)用程序和代碼中出現(xiàn)的錯(cuò)誤。一般良好的編程規(guī)范也會(huì)避免一些不必要的程序錯(cuò)誤的出現(xiàn)。
在項(xiàng)目的開(kāi)發(fā)過(guò)程中,并不是所有的代碼執(zhí)行都和想象那樣理想,總是避免不了異常的發(fā)生。這就需要編程語(yǔ)言的去處理這些異常,C#語(yǔ)言中有三種異常處理語(yǔ)句:
try...catch;//處理異常
try...finally;//清楚異常
try...catch...finally;//處理所有異常
一、用try...catch語(yǔ)句捕獲異常
在try語(yǔ)句中包含容易產(chǎn)生異常的代碼,接著捕獲異常,catch段里的代碼會(huì)注意進(jìn)行適當(dāng)?shù)奶幚恚?br />
格式為:
try
{
}
catch(異常類 異常對(duì)象實(shí)例)
{
}
例一:用上述的語(yǔ)句捕獲訪問(wèn)整型數(shù)組nums時(shí)產(chǎn)生索引越界異常,并提示給用戶:
<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class Program
{
static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
try//捕獲異常
{
for (int i = 0; i <= nums.Length; i++)//遍歷數(shù)組所有元素
{
Console.Write(nums[i] + " ");
}
}
catch (Exception a)//訪問(wèn)異常對(duì)象
{
Console.Write(a.Message);//輸出異常錯(cuò)誤
}
Console.WriteLine();
Console.ReadLine();
}
}
}</span>
輸出的結(jié)果為:
由于數(shù)據(jù)元素的索引是從0開(kāi)始的,for語(yǔ)句遍歷數(shù)組元素時(shí),用了“小于或等于”,正好多遍歷一次,所以出現(xiàn)索引越界。
二、清除與處理所有異常
如果用戶對(duì)產(chǎn)生的錯(cuò)誤不進(jìn)行處理,而清除產(chǎn)生的錯(cuò)誤分配的資源,那么可以使用try...finally語(yǔ)句來(lái)完成,這里的finally塊用于清除try塊中分配的任何資源以及運(yùn)行任何即使在發(fā)生異常時(shí)也必須執(zhí)行的帶代碼。格式為:
try
{
}
catch(異常類 異常對(duì)象實(shí)例)
{
}
finally
{
}
這個(gè)組合是處理所有異常最好的,它合并前面兩種錯(cuò)誤處理技術(shù),即捕獲錯(cuò)誤,清除并繼續(xù)執(zhí)行應(yīng)用程序。
例二:用240去除這個(gè)數(shù)組中的各元素,由于數(shù)組中的元素值有0,所以會(huì)產(chǎn)生處數(shù)據(jù)為0的錯(cuò)誤。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class Program
{
static void Main(string[] args)
{
int[] nums = { 4,8,12,0,10 };
try//捕獲異常
{
for (int i = 0; i < nums.Length; i++)
{
int valude = 0;
valude = 240 / nums[i];
Console.WriteLine("240/{0}={1}", nums[i], valude);
}
}
catch (Exception a)//訪問(wèn)異常對(duì)象
{
Console.WriteLine(a.Message);//輸出異常錯(cuò)誤
}
finally
{
Console.WriteLine("有沒(méi)有異常我都會(huì)運(yùn)行");
}
Console.WriteLine();
Console.ReadLine();
}
}
}
輸出的結(jié)果為:
三、引發(fā)異常
在編寫程序時(shí),有時(shí)可能要引發(fā)異常,以便捕獲異常。引發(fā)異常是通過(guò)throw語(yǔ)句和一個(gè)適當(dāng)?shù)漠惓n悂?lái)實(shí)現(xiàn)的。其格式為:
throw new 異常類(異常描述);
異常類可以是C#語(yǔ)言類庫(kù)中提供的異常類,也可以是自定義異常類。異常描述為可選擇項(xiàng),用來(lái)描述產(chǎn)生異常錯(cuò)誤,可產(chǎn)生異常時(shí)捕獲到以便快速找到產(chǎn)生錯(cuò)誤的代碼。
例三:將字符串轉(zhuǎn)換為整數(shù)的異常
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class Program
{
static void Main(string[] args)
{
string str = "string";
try
{
int returnInt;
returnInt = Program.ConvertStringToInt(str);//調(diào)用轉(zhuǎn)換
Console.Write(returnInt);
}
catch (FormatException a)
{
Console.WriteLine(a.Message);
}
Console.ReadLine();
}
private static int ConvertStringToInt(string str)//定義轉(zhuǎn)換函數(shù)
{
int intNum = 0;
try
{
intNum = Convert.ToInt32(str);
return intNum;
}
catch
{
throw new FormatException("轉(zhuǎn)換錯(cuò)誤");//引發(fā)異常
}
}
}
}
輸出的結(jié)果為:
四、自定義異常類
C#語(yǔ)言雖然預(yù)定義了許多異常類,但是,在有些場(chǎng)合,創(chuàng)建自己的異常類可能會(huì)方便。自定義異常類是通過(guò)繼承System.Exception類來(lái)創(chuàng)建自己的異常類。其步驟是:
(1)聲明一個(gè)異常,格式如下:class 異常類名:Exception{ }
(2)引發(fā)自己的異常,格式如下: throw(ExceptionName);
例四:定義一個(gè)異常類MyException,然后引發(fā)這個(gè)異常類。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class MyException : SystemException { }//聲明異常
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("引發(fā)異常前我是被執(zhí)行的");//引發(fā)異常前的提示
throw new MyException();
Console.WriteLine("因?yàn)橐呀?jīng)引發(fā)異常,所以我不能被執(zhí)行");
}
catch (MyException)
{
Console.WriteLine("引發(fā)異常");
}
Console.ReadLine();
}
}
}
輸出的結(jié)果為:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
上一篇:C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack)實(shí)例詳解
欄 目:C#教程
下一篇:C#定制Excel界面并實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的方法
本文標(biāo)題:輕松學(xué)習(xí)C#的異常處理
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6809.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#停止線程的方法
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#通過(guò)重寫Panel改變邊框顏色與寬度的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開(kāi)原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法


