风雨java路之【基础篇】——异常处理今与昔

        异常概述:

        提及“异常”,就不得不提“错误”,那何为异常?何为错误?

        在使用开发程序软件的过程中, 随着程序代码的增长, 在程序中不可避免地会产生一些错误, 这些错误一般可以分为三类: 语法错误、逻辑错误和运行时错误。
        1 语法错误
         这类错误最容易发现, 开发环境会有相应提示, 提示程序员语法错误发生的地点, 并给出错误原因的相关信息。
        2 逻辑错误
        这类错误是指程序运行正常但产生的结果却和预期的不一样。这类错误往往是由于程序员的逻辑思维混淆所导致的。
        3 运行时错误
        这类错误往往是程序试图执行的操作由于某些原因不可能被执行, 例如当用户试图去打开一个不存在的文件,又如无效的用户输入……
        而异常就是运行时的错误!

        如果不使用错误处理,应用程序将崩溃。那么,当存在错误时我们该怎么办呢? 首先,应当确定是什么导致了错误。然后,应复现错误并监视代码来找出错误的位置和原因。最后, 应当编制一段代码来处理错误以便防止问题的发生。或者, 如果错误发生了, 能够有一个行之有效的办法来处理, 如返回一个错误信息给调用者, 或其他一些可接受的方法。这就是所谓的错误处理。



        异常处理的进化:

        可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会啊!”。我在初学java时也是这样认为的,因为之前学习C#时就是这种格式。
        我计算机的入门语言,是从VB 6.0 开始的,其实在那时就已经接触过“异常”了。当时,自己就是菜中菜,很高深的感觉,但确实也不懂,伴着朦胧美,就过了。现在回头想想头脑中隐约有个印象,仿佛是什么“On Error GoTo……”
重新看了VB中关于异常处理的视频,也看了看当时的总结(下图)。

 

       一、面向过程异常处理

        在谈 Visual Basic 异常处理之前,还提一下面向过程的异常处理方法:

        在面向过程式的编程语言中,处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;通过方法的返回值我们并不能获得错误的详细信息;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。

        ——这其实是面向过程编程的一种通病。


       二、面向对象异常处理

        1.Visual Basic 的错误处理方法:

        它是基于Err这个全局对象的,由Err包办了所有的事项。当某个错误发生时, Visual Basic 在Err对象中填充信息。每一个错误都有相应的错误号和描述, 我们可以使用错误号来判断错误类型, 并基于应用程序的需求来处理错误。Err对象的属性由错误的生成者来设置, 这个生成者或者是Visual Basic, 或者是对象, 或者是程序设计者。Err 对象的Number 属性能够标识错误并让程序对错误做出反应。当遇到On Error语句(比如On Error Resume Next),并且在使用Exit Sub、Exit Function或Exit Property语句退出一个过程后,Error对象的属性值就被清除。若要显式清除Err对象,可以调用它的Clear方法。

        ——这样以来,对错误的处理,就有了“法制”,有效地解决了面向过程编程的诟病。

        举个简单例子:

Private Sub Command1_Click()
    On Error GoTo Cuo 
    S = 7 / 0 '这是出错语句
    Exit Sub 
Cuo: 
    MsgBox "错误 " & Err.Number & " 号:" & Error, vbInformation
    '或
    'MsgBox "错误 " & Err.Number & " 号:" & Err.Description, vbInformation
End Sub

        2.Java异常处理简介:

        Java异常处理通过五个关键字来实现,try,catch,throw ,throws, finally。具体的异常处理结构由try….catch….finally块来实现。try块存放可能出现异常的java语句,catch用来捕获发生的异常,并对异常进行处理。Finally块用来清除程序中未释放的资源。不管理try块的代码如何返回,finally块都总是被执行。基本格式如下:

try {
        程序代码
} catch ( 异常类型1 异常的变量名1 ) {
        程序代码
} catch ( 异常类型2 异常的变量名2 ) {
        程序代码
} finally {
        程序代码
}

        3.通过上面两段代码简单的对比一下:

        1)“On Error GoTo Cuo ”后面的语句,和“try”后面的语句功能类似
        2)“Cuo”这个标记后面的语句,和“catch”后面功能也类似。
        3)VB处理错误时,有这么一个关键字“Raise”,其实它和Java中的“throw”有些类似,都可生成运动时错误!
        4)Java有“finally”来处理一些后事,VB没有此功能。

        4.通过结构原理对比一下:

        补充两个专业词语,像“On Error……”指得是非结构化异常处理,而“try….catch….finally”是结构化异常处理。

        1)简单来说,结构化异常处理是指使用包含异常的控制结构、隔离的代码块和筛选器来创建异常处理机制。这样,您的代码可以区分不同类型的错误,并根据环境做出相应的响应,这样更有针对性(下一篇博客,对Java异常处理进行详细介绍,到时会理解这句话的)。而在非结构化异常处理中,位于代码开头的 On Error 语句处理所有异常,太过于泛泛了。
        2)结构化异常处理是旨在通过将控制结构(类似于 Select Case 或 While)与异常、受保护的代码块和筛选器结合起来,在执行期间检测和响应错误的代码。使用 Try...Catch...Finally 语句,可以保护可能引发错误的代码块。可以嵌套异常处理程序,并且在每个块内声明的变量将具有局部范围。使代码编写更友好。

        3)最根本的一点,我们平时的程序设计就是结构化。而且我们也倡导使用结构化。非结构化就是乱的,比如用goto,on error goto这样的乱跳。



        异常处理的今与昔,实质上就是程序设计的进化。从面向过程,到面向对象,从非结构化到结构化,从而能够应对更为复杂的项目。而根本,就是不将就,是人类程序设计思想的进步!       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值