其实,异常并不是那么难理解。——你不知道的异常(一)
2012-07-30 21:31
274 查看
在做机房收费系统的时候,我用了抛异常的方法来解决这样一个问题:
登陆的时候,我U层调用B层的方法,返回值是boolean类型,但是在B层进行逻辑判断的时候,如果遇到没有此用户,则返回此字符串。这个与返回值是不一致的,所以我就想到了用抛异常这个方法。
但是,不管谁听到抛异常这个方法时,都会说同样一个问题,那就是效率。在执行逻辑判断的时候,当没有走抛异常和走抛异常又能有多大的区别呢?个人见解,肉眼几乎没办法识别出来。在某些时候,我们替计算机想的太多了,而没有替我们的用户着想。
试想看,如果在登陆的时候,你的返回值是boolean,那么只有两种结果,一种是登陆成功,进入系统,另一种就是登陆失败。但是在用户友好性方面就很不好,因为用户根本不知道是哪错了。
我还看到有人这样写,在B层给U层返回的时候,返回的是字符串,然后在U层用了个selectcase语句进行判断,亲亲,你这个U层和B层的耦合你有想一下么?这种程度的耦合算是哪一层的耦合呢?我个人感觉你是U层调用了B层的数据,这个可是内容耦合呀。如果不是,欢迎拍砖指明。
而抛异常只是什么呢?是你从B层往系统写入了一个东西,然后在U层从系统中读出来。这样巧妙的利用了.net的异常处理来解决耦合的问题。
说了这么多,那么异常到底是什么呢?如果一个系统有了异常会怎样?其实最最开始,我们都是害怕异常的产生的,所以在程序里都要有异常处理,以避免程序突然死掉。
可是异常确实是一个好东西,我个人是这样理解异常的:是一个万能的return语句。为什么这样说呢,因为遇到异常,程序后面的就都不再执行了,而是向上找异常处理语句,如果你程序里面没有异常处理语句,那么就有最后的杀手锏,系统异常处理程序(应该避免)。
异常的处理,我就用我自己的话来说吧。
其实异常,你可以看做一个轻气球,而异常的发生,就好像绳子突然断掉了,然后气球就开始往上飞(调用此函数的函数),直至遇到能够阻止他上升的地方为止。
而异常的处理你可以这样理解,一个是你在屋里面,一个是在外面。在屋里面就好比你自己进行了异常处理,气球飞起来了,那么上层调用函数是屋顶,屋顶会把气球抓住,但是屋顶是个暴脾气,看到这么不听话的气球就把他弄爆了。如果在外面,气球会一直往上升,没有人管,但是到达一定程度,就会因为气压的原因而爆掉。
所以不管异常你是怎样处理,最后都会释放掉(有点废话,呵呵)。
关于异常就介绍到这里,下篇说一下用异常和不用异常所消耗的时间对比。
登陆的时候,我U层调用B层的方法,返回值是boolean类型,但是在B层进行逻辑判断的时候,如果遇到没有此用户,则返回此字符串。这个与返回值是不一致的,所以我就想到了用抛异常这个方法。
但是,不管谁听到抛异常这个方法时,都会说同样一个问题,那就是效率。在执行逻辑判断的时候,当没有走抛异常和走抛异常又能有多大的区别呢?个人见解,肉眼几乎没办法识别出来。在某些时候,我们替计算机想的太多了,而没有替我们的用户着想。
试想看,如果在登陆的时候,你的返回值是boolean,那么只有两种结果,一种是登陆成功,进入系统,另一种就是登陆失败。但是在用户友好性方面就很不好,因为用户根本不知道是哪错了。
我还看到有人这样写,在B层给U层返回的时候,返回的是字符串,然后在U层用了个selectcase语句进行判断,亲亲,你这个U层和B层的耦合你有想一下么?这种程度的耦合算是哪一层的耦合呢?我个人感觉你是U层调用了B层的数据,这个可是内容耦合呀。如果不是,欢迎拍砖指明。
而抛异常只是什么呢?是你从B层往系统写入了一个东西,然后在U层从系统中读出来。这样巧妙的利用了.net的异常处理来解决耦合的问题。
说了这么多,那么异常到底是什么呢?如果一个系统有了异常会怎样?其实最最开始,我们都是害怕异常的产生的,所以在程序里都要有异常处理,以避免程序突然死掉。
可是异常确实是一个好东西,我个人是这样理解异常的:是一个万能的return语句。为什么这样说呢,因为遇到异常,程序后面的就都不再执行了,而是向上找异常处理语句,如果你程序里面没有异常处理语句,那么就有最后的杀手锏,系统异常处理程序(应该避免)。
异常的处理,我就用我自己的话来说吧。
其实异常,你可以看做一个轻气球,而异常的发生,就好像绳子突然断掉了,然后气球就开始往上飞(调用此函数的函数),直至遇到能够阻止他上升的地方为止。
而异常的处理你可以这样理解,一个是你在屋里面,一个是在外面。在屋里面就好比你自己进行了异常处理,气球飞起来了,那么上层调用函数是屋顶,屋顶会把气球抓住,但是屋顶是个暴脾气,看到这么不听话的气球就把他弄爆了。如果在外面,气球会一直往上升,没有人管,但是到达一定程度,就会因为气压的原因而爆掉。
所以不管异常你是怎样处理,最后都会释放掉(有点废话,呵呵)。
关于异常就介绍到这里,下篇说一下用异常和不用异常所消耗的时间对比。
相关文章推荐
- 简单点儿、简单点儿、再简单点儿,其实世界可以不是我们想象的那么复杂
- 很不错的JAVA异常总结,异常不是想象的那么简单
- 加拿大学者:乔布斯不是爱迪生 其实没那么伟大
- JavaScript的执行原理,很多人都理解错了:在js被加载后,其实就将js代码执行了一遍,在内存中创建了所有js文件中的变量。而不是激发了某个js方法后,再去相应的js文件中去执行,是去内存中执行
- 简单点儿、简单点儿、再简单点儿,其实世界可以不是我们想象的那么复杂
- 拜读了《婆媳关系好坏取决于老公》一文,看似有道理,细读感觉其实应该不是那么回事
- 委托其实不是那么苦涩难懂
- 加拿大学者:乔布斯不是爱迪生 其实没那么伟大
- 要在技术和学术上有所成就,现在很多青年人最需要解决的其实不是知识问题,而是心理上的问题,是对“成功”定义的理解。
- 关于socket通信的理解,socket连接通过IP+端口号的方式,那么如果两个服务器端的应用在同一台机器上,并且位于同一个tomcat容器下,那么岂不是两个服务器都收到了客户端发送的信息
- 做好一个网站其实不是单单靠时间积累那么简单.
- CUDA编程-(2)其实写个矩阵相乘并不是那么难
- OpenGL ES的状态机说法其实也没那么云山雾照,比较容易理解!
- 其实,TCP不是那么NB~
- 其实编程不是那么恐怖----几句话
- SEO为何见效那么慢,其实你对SEO理解都不一定对
- CUDA编程-(2)其实写个矩阵相乘并不是那么难
- CUDA范例精解通用GPU架构-(2)其实写个矩阵相乘并不是那么难
- viewport其实没那么难理解
- 【漫画】谷歌眼镜Google Glass其实不是那么受欢迎!