[第五章、异常处理] 第一节、异常处理基础

第五章、异常处理

 

第一节、异常处理基础

       异常(Exception)是指运行时代码序列中产生的异常情况。换句话说,异常是一个运行时错误(runtime error)。在不支持异常处理的计算机语言中,错误必须被手工的检查和处理-----典型的是通过错误代码的运用等等。

       一个VBvisual basic)函数(function)的例子:

Private Function ShowMsg(number As Integer)     传入Integer类型参数

On Error GoTo ErrHandle                     当出现错误时跳到ErrHandle标签处

                                                        ‘ VB中使用单引号进行注释                           

        Dim str As String                    ‘ VB中使用Dim来声明一个变量

        Me.MousePointer = vbHourglass              设置当前窗口鼠标的形状

        str = "Hello World!"                        设置字符串str的值

        If (number = 10) Then                            当传入参数等于10

            MsgBox str                                 显示str字符串

              Else

            MsgBox "参数不是10"

        End If                  

        On Error GoTo ErrHandle2            第二处错误处理

        MsgBox number / i            ‘i 没有被初始化,默认值是0

                                                               这里产生一个除0错误

Exit Function                                     退出函数,如果没有此语句就会运行

紧接着的错误处理的代码

ErrHandle:                                                

    Me.MousePointer = vbDefault         设置鼠标为默认形状

    MsgBox Err.number & Err.Description       当函数中出现错误时显示错误编号和描述

       Exit Function

ErrHandle2:

       Me.MousePointer = vbDefault

    MsgBox "这是第二处错误处理!"

End Function

 

       上面是VB中一般的错误处理形式,VB中一般的错误处理代码都是放在函数的最后。

       Java支持异常处理,在Java中,一个异常(Exception)就是一个对象,所有异常类型都是内置类java.lang.Throwable的子类。Throwable类在异常类层次结构的顶层,紧接着Throwable类下面的是把异常分成两个不同分支的子类。一个分支是Exception,一个分支是ErrorException类用于用户程序可能捕捉的的异常情况,它也是你可以用来创建你自己用户异常类型子类的类。Error类定义了在通常环境下不希望被程序捕获的异常,常用于Java运行时系统来显示与运行时系统本身有关的错误,它们通常是灾难性的致命错误,不是你的程序可以控制的,堆栈溢出是这种错误的一例。

你可以将程序中你认为可能会出现错误的地方加上异常处理。Java异常处理通过5个关键字控制:trycachthrowthrowsfinally。下面介绍try/catch/finally语句,通常形式是:

       try{                     

//这里包含你认为可能会出现错误的代码。

 

              //如无问题则代码会从上到下运行

              //代码运行时出错则会抛出异常,

              //可以直接用一个throw语句显示抛出异常

              //或调用一个抛出异常的方法

       }catch(ExceptionType1 exOb){

              //异常类型1 处理代码,ExceptionType 是发生异常的类型

       }catch(ExceptionType2 exOb){

              //异常类型2 处理代码

       }

       …. // try代码块后可以有多个catch

       finally{

              //这个语句块包含了离开try子句后总要执行的代码

              //1try块代码顺利执行

//2)由于breakcontinuereturn语句而将要离开try

//3)当上面的catch块处理了异常

//4)还有未被捕获的异常

// 如果try块中没有调用System.exit()语句,在上面的各种情况下,

//  finally代码块一定会被执行。

       }

当我第一次看到Java中的try语句时,我只会一些C语言,也没什么编程经验,于是我纳闷了很久,为什么要try(尝试)呢?那么这段代码会不会执行?后来才明白怎么一回事,如果也有初学者不明白的话,你可以将try语句理解成: 尝试执行后面的代码,如果无错误则会顺利通过,否则会寻找与错误匹配的catch语句,然后再执行catch内的错误处理代码。

try后面跟多个catch块时 ,当出现异常,每个catch子句被依次检查第一个匹配的异常类型的子句被执行,其他catch子句被旁路。要注意的是,异常子类必须在它们任何父类之前使用,因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,后面运行子类的catch语句将永远不会到达。而且,Java中不能到达的代码是一个错误。

try不能单独使用,后面至少跟一catch子句或一finally子句;try语句可以被嵌套,也就是说一个try代码块内可以包含另一个try代码块。每次进入try语句,异常的前后关系都会被推入堆栈,如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配,这个过程将继续直到一个catch语句匹配成功,或者是直到所有的嵌套try语句被检查完。如果没有catch语句匹配,Java的运行时系统将处理这个异常。
发布了54 篇原创文章 · 获赞 0 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章