c# 中的异常处理
异常被定义为在程序执行期间发生的、程序代码没有预料到的事件。程序不知道发生异常时要执行的操作。在这种情况下,我们创建一个异常对象并调用异常处理程序代码。执行异常处理程序以使程序代码不崩溃的过程称为异常处理。异常处理很重要,因为它可以优雅地处理一个不需要的事件,一个异常,这样程序代码对用户来说仍然有意义。
| 关键字 | 定义 | | 尝试 | 用于定义试块。该块保存可能引发异常的代码。 | | 捕捉 | 用于定义捕捉块。此块捕获由 try 块引发的异常。 | | 最后 | 用于定义最终块。该块保存默认代码。 | | 扔 | 用于手动引发异常。 |让我们举一个简单的例子来理解什么是异常:
c sharp . c sharp . c sharp . c sharp
// C# program to show how
// Exceptions occur in a program
using System;
class GFG {
static void Main(string[] args)
{
// Declare an array of max index 4
int[] arr = { 1, 2, 3, 4, 5 };
// Display values of array elements
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i]);
}
// Try to access invalid index of array
Console.WriteLine(arr[7]);
// An exception is thrown upon executing
// the above line
}
}
运行时错误:
未处理异常: 系统。IndexOutOfRangeException:索引超出了数组的界限。 在 GFG。主(系统。<9 fa 39 B3 B4 dec 49 EB 8 af 89 DC 70 D5 a 0618>:0 【错误】致命未处理异常:系统。IndexOutOfRangeException:索引超出了数组的界限。 在 GFG。主(系统。<9 fa 39 B3 B4 dec 49 EB 8 af 89 DC 70 D5 a 0618>:0 中的字符串[] args) [0x0002e]
输出:
1
2
3
4
5
在上面给出的代码中,为 5 个元素定义了名为“arr”的数组,索引为 0 到 4。当我们试图访问数组中不存在的第 7 个元素时,程序代码抛出一个异常,并显示上面的消息。可以使用系统处理异常。C# 的类异常。这将在下面给出的代码中描述。
使用尝试捕获块的异常处理
下面给出的代码展示了如何使用 try-catch 块处理异常。可能生成异常的代码被放在 try 块中。在这种情况下,对第 7 个元素的访问被放在 try 块中。当执行该语句时,会生成一个异常,该异常被 catch 块捕获。类型为 IndexOutOfRangeException 的对象用于向用户显示已发生异常的消息。 语法:
try
{
// statements that may cause an exception
}
catch( Exception obj)
{
// handler code
}
c sharp . c sharp . c sharp . c sharp
// Exception handling of above code
// using try catch blocks
using System;
class Program : System.Exception {
static void Main(string[] args)
{
// Declare an array of max index 4
int[] arr = { 1, 2, 3, 4, 5 };
// Display values of array elements
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i]);
}
try {
// Try to access invalid index of array
Console.WriteLine(arr[7]);
// An exception is thrown upon executing
// the above line
}
catch (IndexOutOfRangeException e) {
// The Message property of the object
// of type IndexOutOfRangeException
// is used to display the type of exception
// that has occurred to the user.
Console.WriteLine("An Exception has occurred : {0}", e.Message);
}
}
}
输出:
1
2
3
4
5
An Exception has occurred : Index was outside the bounds of the array.
使用多个尝试捕获块
在下面给出的代码中,我们试图在 try 块中生成一个异常,并在多个 catch 块之一中捕获它。当我们不确定可能生成的异常类型时,使用多个 catch 块,因此我们编写不同的块来处理遇到的任何类型的异常。 finally 块是代码中必须执行的部分,不管异常是否生成。在下面给出的程序中,数组的元素显示在 finally 块中。 语法:
try
{
// statements that may cause an exception
}
catch(Specific_Exception_type obj)
{
// handler code
}
catch(Specific_Exception_type obj)
{
// handler code
}
.
.
.
finally
{
//default code
}
c sharp . c sharp . c sharp . c sharp
// C# Program to show use of
// multiple try catch blocks
using System;
class Program {
static void Main(string[] args)
{
int[] arr = {19, 0, 75, 52};
try {
// Try to generate an exception
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i] / arr[i + 1]);
}
}
// Catch block for invalid array access
catch (IndexOutOfRangeException e) {
Console.WriteLine("An Exception has occurred : {0}", e.Message);
}
// Catch block for attempt to divide by zero
catch (DivideByZeroException e) {
Console.WriteLine("An Exception has occurred : {0}", e.Message);
}
// Catch block for value being out of range
catch (ArgumentOutOfRangeException e) {
Console.WriteLine("An Exception has occurred : {0}", e.Message);
}
// Finally block
// Will execute irrespective of the above catch blocks
finally {
for (int i = 0; i < arr.Length; i++) {
Console.Write(" {0}", arr[i]);
}
}
}
}
输出:
An Exception has occurred : Attempted to divide by zero.
19 0 75 52
用户定义的例外
当我们想要编码一个可能没有被语言定义的异常时,用户定义的异常是有用的。例如,在锅炉房,如果温度上升到某个阈值以上,则必须关闭热量。为了理解用户定义的异常是如何使用的,我们举一个被零除的例子。这里我们定义了一个 DivByZero 类,它继承了 Exception,当分母等于零时,由 DivByZero 操作函数调用。由于对函数的调用可能会引发异常,也可能不会引发异常,因此它被放在 try 块中。定义了一个捕获块来捕获任何异常类型,并且消息属性打印已经发生的异常类型。
c sharp . c sharp . c sharp . c sharp
// C# program to show the user defined exceptions
using System;
// User defined Exception class
// Child of Exception
class DivByZero : Exception {
// Constructor
public DivByZero()
{
Console.Write("Exception has occurred : ");
}
}
class Program {
// Method to perform Division
public double DivisionOperation(double numerator,
double denominator)
{
// throw exception when denominator
// value is 0
if (denominator == 0)
throw new DivByZero();
// Otherwise return the result of the division
return numerator / denominator;
}
// Main
static void Main(string[] args)
{
Program obj = new Program();
double num = 9, den = 0, quotient;
try {
// Code block that may cause an exception
quotient = obj.DivisionOperation(num, den);
Console.WriteLine("Quotient = {0}", quotient);
}
// Catch block to catch the generic exception
catch (Exception e) {
// Message property of exception object e
// will give the specific type of the exception
Console.Write(e.Message);
}
}
}
输出:
Exception has occurred : Exception of type 'DivByZero' was thrown.
版权属于:月萌API www.moonapi.com,转载请注明出处