Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 664|回复: 0

C# Exception异常 学习

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-17 16:20:32 | 显示全部楼层 |阅读模式

    @1:try - catch

    Exception类几个常用属性的示例:   TargetSite,  StackTrace,  Source

    示例1
     1 namespace _20130405
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             Loop:
     8             try
     9             {                
    10                 Console.WriteLine("Input Intager One:");
    11                 int x = Convert.ToInt32(Console.ReadLine());
    12                 Console.WriteLine("Input Intager Two:");
    13                 int y = Convert.ToInt32(Console.ReadLine());
    14                 Console.WriteLine("x / y = {0}", x / y);
    15             }
    16             catch (FormatException format)
    17             {
    18                 //Console.WriteLine(format.Message);
    19                 Console.WriteLine(format.TargetSite);       //捕获引发当前异常的方法
    20                 Console.WriteLine();
    21                 Console.WriteLine();
    22                 Console.WriteLine(format.StackTrace);       //捕获当前异常发生所经历的方法的名称和签名
    23                 Console.WriteLine();
    24                 Console.WriteLine();
    25                 Console.WriteLine(format.Source);           //捕获或设置导致错误的应用程序或对象的名称
    26                 Console.WriteLine();
    27                 Console.WriteLine();
    28                 /*
    29                 Input Intager One:
    30                 1.0
    31                 Void StringToNumber(System.String, System.Globalization.NumberStyles, NumberBuff
    32                 er ByRef, System.Globalization.NumberFormatInfo, Boolean)
    33 
    34 
    35                    在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffe
    36                 r& number, NumberFormatInfo info, Boolean parseDecimal)
    37                    在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo in
    38                 fo)
    39                    在 System.Convert.ToInt32(String value)
    40                    在 _20130405.Program.Main(String[] args) 位置 F:\2013\20130405\20130405\Progr
    41                 am.cs:行号 17
    42 
    43 
    44                 mscorlib
    45                  */
    46             }
    47             catch (DivideByZeroException zero)
    48             {
    49                 //Console.WriteLine(zero.Message);
    50                 Console.WriteLine(zero.TargetSite);
    51                 Console.WriteLine();
    52                 Console.WriteLine();
    53                 Console.WriteLine(zero.StackTrace);
    54                 Console.WriteLine();
    55                 Console.WriteLine();
    56                 Console.WriteLine(zero.Source);
    57                 Console.WriteLine();
    58                 Console.WriteLine();
    59                 /*                                 
    60                 Input Intager One:
    61                 1
    62                 Input Intager Two:
    63                 0
    64                 Void Main(System.String[])
    65 
    66 
    67                    在 _20130405.Program.Main(String[] args)
    68 
    69 
    70                 20130405
    71                  */
    72             }           
    73             catch (Exception e)
    74             {
    75                 //当捕获多个异常时,若两个catch块的异常类存在继承关系,则要先捕获派生类的异常,再捕获基类的异常.
    76                 //否则,捕获派生类异常的catch块将不起作用,并且会在编译时报错. 所以此处的这个catch必须放在三个
    77                 //catch中的最后
    78                 Console.WriteLine(e.Message);
    79             }
    80             
    81             goto Loop;
    82         }
    83     }
    84 }

    @2:try - finally

      在执行时,若没有发生异常,try - finally语句将按正常方式执行,若try块内存在异常,则将在执行完finally块后,抛出异常.

      finally块用于清除try块中分配的任何资源,以及执行  即使发生异常也必须执行的  代码.

    @3:try - catch - finally

      在异常处理中最多只能有一个finally块!

    示例2
     1 static void Main(string[] args)
     2         {
     3             int sum = 0;
     4             try
     5             {
     6                 int[] a = {1, 3, 4, 5, 6};
     7                 for (int i = 0; i < 6; ++i)
     8                 {
     9                     sum += a;
    10                 }
    11                 Console.WriteLine("try中的:sum = {0}", sum);    //这条语句没有执行
    12                 //如果try块中出现了异常,则程序终止try块的语句,进入catch块, 所以此处没有进行输出.
    13             }
    14             catch (ArgumentOutOfRangeException argu)
    15             {
    16                 Console.WriteLine(argu.Message);
    17             }
    18             catch (Exception e)
    19             {
    20                 Console.WriteLine(e.Message);
    21             }
    22             finally
    23             {
    24                 Console.WriteLine("finally中的:sum = {0}", sum);
    25             }
    26             Console.ReadLine();
    27             /*运行结果:
    28             索引超出了数组界限。
    29             finally中的:sum = 19
    30              */
    31         }

    @4:throw语句用于发出  在程序执行期间出现异常情况  的 信号.

      throw  表达式;

      其中表达式必须表示一个Exception类或它的派生类型,也可以在throw语句后没有表达式,表示将异常再次抛出.

    示例3
     1 static void Main(string[] args)
     2         {
     3             int i = 0;
     4             int count = 3;
     5             Console.WriteLine("Please Input the KeyWord:");
     6 
     7             try
     8             {
     9                 while (Console.ReadLine() != "wxy")
    10                 {
    11                     Console.WriteLine("Wrong KeyWord!");
    12 
    13                     i++;
    14                     if (i >= count)
    15                         throw (new Exception("Over 3 times! Quit!"));
    16                     Console.WriteLine("Please Input the KeyWord:");
    17                 }
    18                 Console.WriteLine("Success!");
    19             }
    20             catch (Exception e)
    21             {
    22                 Console.WriteLine(e.Message);
    23             }            
    24             Console.ReadLine();
    25 
    26             /*
    27             Please Input the KeyWord:
    28             1
    29             Wrong KeyWord!
    30             Please Input the KeyWord:
    31             2
    32             Wrong KeyWord!
    33             Please Input the KeyWord:
    34             3
    35             Wrong KeyWord!
    36             Over 3 times! Quit!
    37              */
    38         }

    @5:自定义异常类:

      对于自定义的异常要在出现异常时使用throw关键字来引发异常.

      自定义异常类继承于System.ApplicationException类,该类是区别于异常是系统定义的还是用户自定义的.

    示例4
     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             int age = 209;
     6             try
     7             {
     8                 if (age < 0 || age > 200)
     9                     throw (new MyException("年龄超范围", age));
    10             }
    11             catch (MyException ex)
    12             {
    13                 Console.WriteLine("catch块: {0}", ex.MyMessage);
    14             }
    15 
    16             Console.WriteLine("age = {0}", age);
    17             Console.WriteLine("END!");
    18             Console.ReadLine();
    19             /*
    20             自定义错误:
    21             年龄不能大于200
    22             catch块: 应用程序中的错误。
    23             age = 209
    24             END!
    25              */
    26         }
    27 
    28     }
    29     class MyException : ApplicationException
    30     {
    31         private string myMessage;
    32         public string MyMessage
    33         {
    34             get { return myMessage; }
    35             set
    36             {
    37                 myMessage = Message;
    38                 //myMessage = value;       //Message
    39             }
    40         }
    41         public MyException(string str, int value)
    42         {
    43             MyMessage = str;
    44             Console.WriteLine("自定义错误:");
    45             if (value < 0)
    46                 Console.WriteLine("年龄不能小于0");
    47             else
    48                 Console.WriteLine("年龄不能大于200");
    49         }
    50     }

     

    Reference:

    吴晓艳《C#语言程序设计》

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 17:04 , Processed in 0.054866 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表