其实,异常并不是那么难理解。——你不知道的异常(一)
在做机房收费系统的时候,我用了抛异常的方法来解决这样一个问题:
登陆的时候,我U层调用B层的方法,返回值是boolean类型,但是在B层进行逻辑判断的时候,如果遇到没有此用户,则返回此字符串。这个与返回值是不一致的,所以我就想到了用抛异常这个方法。
但是,不管谁听到抛异常这个方法时,都会说同样一个问题,那就是效率。在执行逻辑判断的时候,当没有走抛异常和走抛异常又能有多大的区别呢?个人见解,肉眼几乎没办法识别出来。在某些时候,我们替计算机想的太多了,而没有替我们的用户着想。
试想看,如果在登陆的时候,你的返回值是boolean,那么只有两种结果,一种是登陆成功,进入系统,另一种就是登陆失败。但是在用户友好性方面就很不好,因为用户根本不知道是哪错了。
我还看到有人这样写,在B层给U层返回的时候,返回的是字符串,然后在U层用了个selectcase语句进行判断,亲亲,你这个U层和B层的耦合你有想一下么?这种程度的耦合算是哪一层的耦合呢?我个人感觉你是U层调用了B层的数据,这个可是内容耦合呀。如果不是,欢迎拍砖指明。
而抛异常只是什么呢?是你从B层往系统写入了一个东西,然后在U层从系统中读出来。这样巧妙的利用了.net的异常处理来解决耦合的问题。
说了这么多,那么异常到底是什么呢?如果一个系统有了异常会怎样?其实最最开始,我们都是害怕异常的产生的,所以在程序里都要有异常处理,以避免程序突然死掉。
可是异常确实是一个好东西,我个人是这样理解异常的:是一个万能的return语句。为什么这样说呢,因为遇到异常,程序后面的就都不再执行了,而是向上找异常处理语句,如果你程序里面没有异常处理语句,那么就有最后的杀手锏,系统异常处理程序(应该避免)。
异常的处理,我就用我自己的话来说吧。
其实异常,你可以看做一个轻气球,而异常的发生,就好像绳子突然断掉了,然后气球就开始往上飞(调用此函数的函数),直至遇到能够阻止他上升的地方为止。
而异常的处理你可以这样理解,一个是你在屋里面,一个是在外面。在屋里面就好比你自己进行了异常处理,气球飞起来了,那么上层调用函数是屋顶,屋顶会把气球抓住,但是屋顶是个暴脾气,看到这么不听话的气球就把他弄爆了。如果在外面,气球会一直往上升,没有人管,但是到达一定程度,就会因为气压的原因而爆掉。
所以不管异常你是怎样处理,最后都会释放掉(有点废话,呵呵)。
关于异常就介绍到这里,下篇说一下用异常和不用异常所消耗的时间对比。