概述
作为一个小菜的我,虽然学业不精,但是到现在已经学习过编程语言Visual Basic、后来又利用一小点时间自学过C++、这些天接着又见识了C#……
那时候还没有深刻的体会好好学习这几个字,VB的总体框架还记得,C++由于是为了考试而在短时间内学的,所以基本都忘光了。是C#重新给了我希望,看着虽然像是一个陌生的语言,但是渐渐的学下去的时候发现,它能让我想起很多VB和C++忘记的东西,所以学起来也就开心了……
今天学到了C#中的异常处理机制。这让我想起了C++、VB中都有相关的异常处理机制。
在编程编制的过程中,总是没有办法避免错误,然而,对于使用方法给引发的错误要在程序执行过程中尽可能作出处理,即异常处理。对于比较大的软件来说,在程序测试的过程中也往往会出现错误,但是查找错误要比改正错误难的多,所以,调试的方法也很重要。
----------------C#篇
首先,异常也是一种错误,它可导致程序不能正确运行,会出现系统崩溃等问题。所以,在程序的编制过程中,程序都必须处理可能出现的异常。C#使用的方法是:采用异常类Exception为每种错误提供定制的处理,并把识别错误的代码和处理错误的代码分离开来。一般要把程序的相关部分分为三种不同类型的代码块:
C#中的异常处理怎样使用呢?
namespace yichangchuli
{
class Program
{
static void Main(string[] args)
{
string userInput;
while (true )
{
try
{
Console.WriteLine("请输入0 至5之间的数字,或者回车退出");
userInput = Console.ReadLine();
if (userInput == "")
break;
int index = Convert.ToInt32(userInput);
//超出下标,抛出一个异常
if (index < 0 || index > 5)
throw new IndexOutOfRangeException("您输入的有误");
Console.WriteLine("您的数字是:"+index );
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("Indexoutof 异常:" + "数字必须是0 至5之间的" + ex.Message);
}
catch (Exception exc)
{
Console .WriteLine ("错误是:",exc.Message );
}
finally
{
Console .WriteLine ("谢谢您的使用");
}
}
}
}
2、抛出异常
当你必须捕获异常时,必须首先能够引发异常。但是当不能引发异常时,可以通过throw方法引发异常,这是为了告诉程序调用者,程序产生的错误结果由于他们的调用引起的。如
3、C#中一些常用的异常类
SystemException类和ApplicationException类。它们是Exception的直接派生类中最常用的两个。SystemException类是System命名空间中所有其他异常类的基类。ApplicationException类则表示应用程序发生非异常错误时所引发的异常。由公共语言运行时引发的异常,通常使用SystemException。而由应用程序自身引发的异常,则通常使用ApplicationException。
| 异常类 | 描述 |
与参数有关的 | ArgumentException | 参数错误:方法的参数无效 |
| ArgumentNullException | 参数为空:给方法传递一个不可接受的空参数 |
| FormatException | 参数的格式不正确 |
与成员访问有关的 | MemberAccessException | 表示访问类的成员失败所引发的异常,原因可能是没有足够的访问权限,也可能是要访问的成员根本不存在。 |
与数组有关的 | IndexOutOfRangeException | 下标超过数组长度时
|
| ArrayTypeMismatchException | 视图在数组中存储类型不正确的元素时 |
| RankException | 如果使用了维数错误的数组 |
与算术有关的 | ArithmeticException | 数学计算错误:由于数学运算导致的异常,是一个与算术有关的所有异常类的基类。 |
| DivideByZeroExceptiong | 表示整数或十进制运算中视图除以零时所引发的异常 |
关于溢出 | OverfolwException | 溢出 |
| StackOverfolwException | 栈溢出 |
| |
4、C#中还提供了对程序编译的两种辅助手段,即跟踪和调试,用于检出或发现程序中的错误。
(1)调试
设置断点调试,
监视变量运行:在中断方式下,可以设置监视,用于显示变量的信息。
逐语句和逐过程调试
(2)跟踪
使用ASP开发应用程序是,一般讲输入输出语句插入到代码中,检查变量或结构,断言是否正确,或者只是通过应用程序的执行路径进行的一般跟踪。C#中提供了来自System.Diagnostics命名空间下的处理跟踪和断言的两个类:Trace和Debug。
------------ C++篇
在一个小的程序中,可以用比较简单的方法处理异常。但是在一个大的系统中,如果在每一个函数中都设置处理异常的程序段,会使程序过于复杂和庞大。因此,C++采取的办法是: 如果在执行一个函数过程中出现异常,可以不在本函数中立即处理,而是发出一个信息,传给它的上一级(即调用它的函数),它的上级捕捉到这个信息后进行处理。如果上一级的函数也不能处理,就再传给其上一级,由其上一级处理。如此逐级上送,如果到最高一级还无法处理,最后只好异常终止程序的执行。
这样做使异常的发现与处理不由同一函数来完成。好处是使底层的函数专门用于解决实际任务,而不必再承担处理异常的任务,以减轻底层函数的负担,而把处理异常的任务上移到某一层去处理。这样可以提高效率。
C++处理异常的机制是由3个部分组成的:
即检查(try)、抛出(throw)和捕捉(catch)。把需要检查的语句放在try块中,throw用来当出现异常时发出一个异常信息,而catch则用来捕捉异常信息,如果捕捉到了异常信息,就处理它。
(1)throw语句一般是由throw运算符和一个数据组成的,其形式为
throw 表达式;
(2) try-catch的结构为
try
{被检查的语句}
catch(异常信息类型 [变量名])
{进行异常处理的语句}
------------ VB篇
VB程序中也会有错误的出现,但是VB中提供了一些处理错误的方法。使用On error Goto语句在一个过程中指定错误处理代码所在。接着On error Goto语句关闭错误陷阱,然后On error Resume Next 语句用来改变错误陷阱,相当于一个跳转语句,仍能保持程序继续执行,跳过错误的代码程序块。
我自己体验过的错误处理就上面一个,当然强大的VB还有很多处理错误的方式。下面是在网上搬下来的:
利用VB的编译选项,VB有两个设置项会在很大程度上影响我们创建非常坚实的代码的能力。一个设置项是Compile On Demand(按需要进行编译),另一个设置项是Background Compile(后台编译)。可以打开Options对话框,选定General选项卡,然后对这两个设置项进行设置。当选定Compile On Demand时,如果单击工具栏上的Run按钮,或者按F5键,VB并不全面编译我们的项目。相反,只在引用过程时,才对这些过程进行编译。使用Compile On Demand,通常可使比较大的项目或者速度较慢的计算机上的项目能够更快地启动运行,但是它也会产生某些不被注意的编译错误。在发现和纠正所有编译错误之前,不能将项目编译成.exe或.dll之类的可发布文件,因此,选定Compile On Demand并不能够发布带有编译错误的代码。但是,选定Compile On Demand后,会导致编译错误随着时间的推移而不断增加,从而在最后试图进行全面编译时,迫使我们对代码进行大量的纠错。如果在IDE中调试项目,VB常常必须停止(不只是暂停)运行,以便进行纠错操作。这使得调试正在运行的项目时对大量编译错误的纠正操作变得非常麻烦。如果能够在合理的时间内全面编译项目,那么可以考虑关闭Compile On Demand。也可以使Compile On Demand保持选定状态,但是要定期按Ctrl+F5键,以便重新运行我们的项目。这使我们在编程时能够定期纠正编译错误,而不必一次性纠正大量的编译错误。
最后
以上就是激情斑马为你收集整理的编程语言中的那些异常处理和错误——小菜的全部内容,希望文章能够帮你解决编程语言中的那些异常处理和错误——小菜所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复