`
sjk2013
  • 浏览: 2183719 次
文章分类
社区版块
存档分类
最新评论

VB.NET异常处理及抛出异常

 
阅读更多

异常处理是.NET平台重要的安全机制,它将错误代码的接受和处理的进行了完美的分离,理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解,而且还提供了处理程序运行时出现的任何意外或异常情况的方法。在.NET平台中异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。异常处理(又称为错误处理)功能。与传统VB6.0中的On Error语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便。

一、异常处理的三个语句块

.NET平台中异常处理主要是由try/catch/finally三个语句块构成,try块负责错误代码的捕获,catch进行错误的处理,finally负责错误处理后的后续工作如:释放对象、清理资源等的工作。

Try
  '程序代码
Catch
  '处理异常的代码
Finally
  '清理工作
End Try 

在上面的语句块中Try和Finally语句块是必须运行的,但是Catch语句块不一定运行,如果Try块内的代码没有错误,没有抛出异常的话,Catch语句块中的代码是不运行的,而是跳过Catch块直接运行Finally块中的清理工作。反之如果遇到了异常Catch语句块中的处理工作就要进行。

为什么要在Finally块中进行清理工作?简单的说一个程序的异常会导致程序不能正常完成结束工作,而且在错误出现的地方跳出程序,直接执行Catch语句块中的代码,使得在程序运行时构建的对象资源不能释放,浪费了内存资源,同时也可能导致栈中数据存储的杂乱,所以无论有没有出现异常Finally块中的代码是一定会运行的。

异常处理的代码实例:

Private Sub FirstTryCatchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FirstTryCatchButton.Click
        Dim sngAvg As Single
        sngAvg = GetAverage(0, 100)

End Sub

Private Function GetAverage(ByVal iItems As Integer, ByVal iTotal As Integer) As Single
        ' Code that might throw an exception is wrapped in a Try block
        Try
            Dim sngAverage As Single

            ' This will cause an exception to be thrown if iItems = 0
            sngAverage = CSng(iTotal \ iItems)

            ' This only executes if the line above generated no error
            MessageBox.Show("Calculation successful")
            Return sngAverage

        Catch excGeneric As Exception
            ' If the calculation failed, you get here
            MessageBox.Show("Calculation unsuccessful - exception caught")
            Return 0
        End Try

End Function

二、抛出异常

我们知道在程序中出现异常会导致提前跳出程序,同样抛出异常也是跳出程序代码,直接运行Catch块中的内容。抛出异常不仅可以应用在程序代码出现错误时,我们还可以使用抛出异常的机制来捕获一个过程或一个函数中出现异常值的情况,可以把这种方法看做是一个函数返回一个特殊值,通过上层函数来捕获程序中遇到异常的情况。VB.NET使用Throw关键字来在程序中抛出异常,让调用这个函数的上级调用函数进行处理。

Private Sub ThrowNewExceptionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ThrowNewExceptionButton.Click
        Try
            Dim sngAvg As Single
            sngAvg = GetAverage4(0, 100)
        Catch exc As Exception
            MessageBox.Show(exc.Message)
        Finally
            MessageBox.Show("Finally block in click event")
        End Try
End Sub

Private Function GetAverage4(ByVal iItems As Integer, ByVal iTotal As Integer) As Single

        If iItems = 0 Then
            Dim excOurOwnException As New ArgumentException("Number of items cannot be zero")

            Throw excOurOwnException
        End If
End Function




分享到:
评论

相关推荐

    vb.net hook api(源码)

    利用VB.NET HOOKAPI获取鼠标 及键盘输入 调试会抛出异常~ 直接运行Debug就可以

    .net 一些无法catch的异常

    而是你的代码出现了无线递归),如果你用throw new StackOverFlowException 还是可以catch的2.OutOfMemoryException (好像只有 box newarr newobj 才会抛出这个异常)3.非CLS的异常(一般来源于本地代码,这些异常不继承...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    6.4.3 抛出新的异常 272 6.4.4 exit try语句 273 6.4.5 嵌套的try结构 274 6.4.6 异常属性的使用 275 6.4.7 message属性 276 6.4.8 innerexception和targetsite属性 276 6.5 与visual basic 6样式的错误...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    3.2.4 抛出异常 45 3.3 作用域概念 47 3.3.1 局部属性 48 3.3.2 对象属性 49 3.3.3 类属性 50 3.4 操作符重载 51 3.5 多重继承 52 3.6 对象操作 53 3.7 小结 54 3.8 参考书目 54 3.9 本章使用的示例代码 ...

    Winform自定义消息框,好看的消息提示Alert源码

    Winform自定义消息框,好看的消息提示Alert源码,国外大神,很基础的实现,可以在此基础上进行优化和进一步调整。Winform控件、Winform优美提示框、消息框、Alert信息弹窗、Notification

    asp.net中DBNull.Value,null,String.Empty区别浅析

    首先,“null”是C#中(VB.NET为Nothing),表示某个引用对象变量“未引用”任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常)。 String.Empty是一个静态的公共变量,...

    net学习笔记及其他代码应用

    6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? ...

    C#微软培训资料

    8.4 异常处理语句 .95 8.5 小 结 .100 第三部分 面向对象的 C#.101 第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计...

    Visual C++ 2005入门经典--源代码及课后练习答案

    6.3.1 抛出异常 255 6.3.2 捕获异常 256 6.3.3 MFC中的异常处理 257 6.4 处理内存分配错误 258 6.5 函数重载 259 6.5.1 函数重载的概念 260 6.5.2 何时重载函数 262 6.6 函数模板 262 6.7 使用...

    java源码包---java 源码 大量 实例

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB...

    JAVA上百实例源码以及开源项目

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    JAVA上百实例源码以及开源项目源代码

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    java源码包2

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    java源码包3

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    java源码包4

    从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始...

Global site tag (gtag.js) - Google Analytics