在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C#/ C#異常處理
C#屬性(Properties)
C#與Java比較
C#方法
C#枚舉
C#關(guān)鍵字
C# StreamReader類
C#不安全代碼
C#文件(I/O)
C#匿名方法
C#線程同步
C# Thread類
C#主線程
C#數(shù)據(jù)類型
C# FileStream類
C#預(yù)處理指令
C#繼承
C#循環(huán)
C#決策結(jié)構(gòu)
C#集合
C#反射
C#類型轉(zhuǎn)換
C#泛型
C# StringReader類
C#歷史
C#運(yùn)算符重載
C#屬性
C#線程實(shí)例:Sleep()方法
C#線程示例:優(yōu)先級(jí)
C#線程實(shí)例:Join()方法
C# BinaryReader類
C#類
C#索引器
C# BinaryWriter類
C#序列化
C#常量和文字
C#程序結(jié)構(gòu)
C#封裝
C#事件
C#可空類型(nullable)
C#基本語(yǔ)法
C#異常處理
C#教程
C#接口
C# System.IO命名空間
C#線程命名實(shí)例
C# StringWriter類
C#線程實(shí)例
C#數(shù)組
C#正則表達(dá)式
C#命名空間
C#反序列化
C#與C++比較
C# TextWriter類
C#多線程
C#字符串
C#是什么?
C#變量
C# FileInfo類
C#線程實(shí)例:Abort()方法
C#結(jié)構(gòu)體
C#運(yùn)算符
C#入門程序
C#多線程生命周期
C# TextReader類
C# DirectoryInfo類
C#委托

C#異常處理

異常(例外)是在執(zhí)行程序期間出現(xiàn)的問(wèn)題。 C# 異常是對(duì)程序運(yùn)行時(shí)出現(xiàn)的異常情況的響應(yīng),例如:除以零的算術(shù)運(yùn)算。

異常提供了將控制從程序的一個(gè)部分轉(zhuǎn)移到另一個(gè)程序的方法。 C# 異常處理建立在四個(gè)關(guān)鍵字上:try,catch,finallythrow。

  • trytry塊標(biāo)識(shí)一個(gè)特定異常被激活的代碼塊。try塊之后有一個(gè)或多個(gè)catch塊。
  • catch:程序在處理問(wèn)題的程序中的某個(gè)位置使用異常處理程序捕獲異常。catch關(guān)鍵字表示捕獲異常。
  • finallyfinally塊用于執(zhí)行給定的一組語(yǔ)句,無(wú)論拋出異常還是拋出異常。例如,如果打開(kāi)文件,則不管是否引發(fā)異常,都必須關(guān)閉該文件。
  • throw:當(dāng)出現(xiàn)問(wèn)題時(shí),程序會(huì)拋出異常。這是使用throw關(guān)鍵字完成的。

語(yǔ)法

假設(shè)一個(gè)塊引發(fā)異常,一個(gè)方法使用trycatch關(guān)鍵字的組合來(lái)捕獲異常。try/catch塊放在可能會(huì)產(chǎn)生異常的代碼周圍。try/catch塊中的代碼被稱為受保護(hù)代碼,并且使用try/catch的語(yǔ)法如下所示:

try
{
   // statements causing exception
}catch( ExceptionName e1 ){
   // error handling code
}catch( ExceptionName e2 ){
   // error handling code
}catch( ExceptionName eN ){
   // error handling code
}finally{
   // statements to be executed
}

可以列出多個(gè)catch語(yǔ)句來(lái)捕獲不同類型的異常,以防try塊在不同情況(case)下引發(fā)多個(gè)異常。

C# 異常類

C# 異常由類表示。 C# 中的異常類主要直接或間接地從System.Exception類派生。 從System.Exception類派生的一些異常類是System.ApplicationExceptionSystem.SystemException類。

System.ApplicationException類支持應(yīng)用程序生成的異常。因此,程序員定義的異常應(yīng)該從這個(gè)類派生出來(lái)。

System.SystemException類是所有預(yù)定義系統(tǒng)異常的基類。

下表列出了一些從System.SystemException類派生的一些預(yù)定義的異常類:

異常類 描述
System.IO.IOException 處理I/O錯(cuò)誤
System.IndexOutOfRangeException 處理當(dāng)方法引用數(shù)組索引超出范圍時(shí)生成的錯(cuò)誤。
System.ArrayTypeMismatchException 處理類型與數(shù)組類型不匹配時(shí)生成的錯(cuò)誤。
System.NullReferenceException 處理從引用空(null)對(duì)象而產(chǎn)生的錯(cuò)誤。
System.DivideByZeroException 處理除以零產(chǎn)生的錯(cuò)誤。
System.InvalidCastException 處理類型轉(zhuǎn)換過(guò)程中產(chǎn)生的錯(cuò)誤。
System.OutOfMemoryException 處理由于空閑內(nèi)存不足而產(chǎn)生的錯(cuò)誤。
System.StackOverflowException 處理由于空閑內(nèi)存不足而產(chǎn)生的錯(cuò)誤。
System.StackOverflowException 處理堆棧溢出產(chǎn)生的錯(cuò)誤。

處理異常

C# 以trycatch塊的形式提供了異常處理的結(jié)構(gòu)化解決方案。使用這些塊,核心程序語(yǔ)句與錯(cuò)誤處理語(yǔ)句分離。

這些錯(cuò)誤處理塊使用try,catchfinally關(guān)鍵字實(shí)現(xiàn)。下面是一個(gè)除以零條件發(fā)生異常時(shí)的異常:

using System;
namespace ErrorHandlingApplication
{
   class DivNumbers
   {
      int result;
      DivNumbers()
      {
         result = 0;
      }
      public void division(int num1, int num2)
      {
         try
         {
            result = num1 / num2;
         }
         catch (DivideByZeroException e)
         {
            Console.WriteLine("Exception caught: {0}", e);
         }
         finally
         {
            Console.WriteLine("Result: {0}", result);
         }
      }
      static void Main(string[] args)
      {
         DivNumbers d = new DivNumbers();
         d.division(25, 0);
         Console.ReadKey();
      }
   }
}

當(dāng)上述代碼被編譯并執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

用戶定義的異常

您也可以定義自己的異常。用戶定義的異常類派生自Exception類。以下示例演示如何創(chuàng)建一個(gè)自定義異常:

using System;
namespace UserDefinedException
{
   class TestTemperature
   {
      static void Main(string[] args)
      {
         Temperature temp = new Temperature();
         try
         {
            temp.showTemp();
         }
         catch(TempIsZeroException e)
         {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}

public class TempIsZeroException: Exception
{
   public TempIsZeroException(string message): base(message)
   {
   }
}

public class Temperature
{
   int temperature = 0;
   public void showTemp()
   {
      if(temperature == 0)
      {
         throw (new TempIsZeroException("Zero Temperature found"));
      }
      else
      {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

當(dāng)上述代碼被編譯并執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:

TempIsZeroException: Zero Temperature found

拋出對(duì)象

如果直接或間接派生自System.Exception類,則可以拋出一個(gè)對(duì)象??梢栽?code>catch塊中使用throw語(yǔ)句將當(dāng)前對(duì)象拋出:

Catch(Exception e)
{
   ...
   Throw e
}

上一篇:C#運(yùn)算符下一篇:C# TextWriter類