于梦想齐行
于梦想齐行

C#异常处理

C#异常处理
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //异常处理
            //处理时建立在4个关键词之上:try、catch、finally和throw
            /*
             * try: 一个try块标识了一个将被激活的特定的异常的代码块。后跟一个或多个catch块
             * catch: 程序通过异常处理程序捕获异常。catch关键字表示异常的捕获
             * finally: finally块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果你打开一个文件,不管是否出现异常文件都要被关闭
             * throw: 当问题出现时,程序抛出一个异常。使用throw关键字来完成
             */
             try
            {
                //引起异常的语句
            }
            catch(DivideByZeroException e1)
            {
                //错误处理代码
            }
            catch (Exception e1)
            {
                //错误处理代码
            }
            finally
            {
                //要执行的释放代码
            }
            //异常类
            /*
             * C#异常是使用类来表示的。C#中的异常类主要是直接或间接地派生于System.Exception类。System.ApplicationException和System.SystemException类派生于System.Exception类的异常类。
             * System.ApplicationException类支持由应用程序生成的异常。所以程序员定义的异常都应派生自此类。
             * System.SystemException类是所有预定义的系统异常的基类。下面是一些派生自System.SystemException类的预定义的异常类:
             * 异常类          描述
             * System.IO.IOException            处理I/O错误
             * System.IndexOutOfRangeException          处理当方法指向超出范围的数组索引时生成的错误
             * System.ArrayTypeMismatchException        处理当数组类型不匹配时生成的错误
             * System.NullReferenceException            处理当依从一个空对象时生成的错误
             * System.DivideByZeroException             处理当除以0时生成的错误
             * System.InvalidCastException              处理在类型转换期间生成的错误
             * System.OutOfMemoryException              处理空闲内存不足生成的错误
             * System.StackOverflowException            处理栈溢出生成的错误
             */
            //异常处理
            DivNumbers div1 = new DivNumbers();
            div1.division(57, 0);

            //用户自定义异常,派生自ApplicationException类
            Temperature temp = new Temperature();
            try
            {
                temp.showTemp();
            }catch(TempIsZeroException e)
            {
                Console.WriteLine("TempIsZeroException: {0}", e.Message);
            }

            //抛出对象
            //如果异常是直接或间接派生自System.Exception类,你可以抛出一个对象。你可以在catch块中使用throw语句来抛出当前的对象
            try
            {
                try
                {
                    int x1 = 9;
                    int x2 = 0;
                    int a = x1 / x2;
                    Console.WriteLine("a: {0}", a);
                }
                catch(DivideByZeroException e)
                {
                    throw e;
                }
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("top try...catch: {0}", e);
            }

            Console.ReadKey();
         }
    }
    public class TempIsZeroException: ApplicationException
    {
        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);
            }
        }
    }
    public class DivNumbers
    {
        int result;
        public 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);
            }
        }
    }
    
}
没有标签
首页      CSharp      C#异常处理

于梦想齐行

C#异常处理
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //异常处理 //处理时建立…
扫描二维码继续阅读
2022-06-27
近期文章
近期评论