我对异常的理解_temp1

来源:互联网 发布:js 实现高斯模糊效果 编辑:程序博客网 时间:2024/05/21 09:47

我现理解的异常很浅显,也就是了解了一些规则和形式,至于背后的东西不明不白啊

try

catch

throw

    这三个东西在我眼中就是异常. try里面放一些可能会引发异常的代码,当里面的代码真的引发了异常,try就会把异常送给相应的catch来处理,所以catch里面的东西是用来解决异常的.throw应该是在代码编写的过程中程序员觉得某个地方可能会发生意外,于是在该处加了一个throw, throw后面添加的应该是程序员认为的意外的类型.
   程序在运行过程中,如果try里面的某些语句真的引发了异常,也就是执行了某条throw语句,那么,整个程序就停止往下运行了,而是返回到包含这个异常的try块处,此时这个try就把该异常抛给了跟在其后的catch了(catch来处理这个异常),当然catch能处理的类型要和异常的类型匹配, ...先写到这 我该回去游泳了...减肥现在才是最重要的事情. 呵呵

 

2010-01-06今天继续,首先写一个简单的应用异常的例子

注意:一个try块后面要紧跟着若干catch块,他们是成对出现的.

在这个try块里面写了三种异常,也就是写了三个throw,也就是throw了三个不同的类型:字符串型,double型,int型;然后写了对应这三种类型的catch来处理它们.也就是说一个catch只能处理对应的throw,就像是电工只处理电的问题,木工呢就只干木匠活.这里有一个问题:如果马桶坏了,而此时没有修马桶的怎么办?这时就只能找物业来解决了. 在上面的例子中,如果把int型的catch去掉的话,当throw 2012时,就没有谁能够catch它了,这时候程序就会因为这个异常终止了.

下面我们改变一下这个例子的代码

fun()中的catch们能够接住两种类型的throw(int型,double型),但是fun()可能产生三种类型的throw(字符串型,int型,double型),如果fun() throw一个char*,fun()的catch们肯定是谁也接不住了.但是,幸好fun()的调用也是包含在一个try块中的,这个try块对应的catch们中正好有一个能接字符串的catch.于是它接住了fun()中throw的char* ...呵呵.

那么,我现在又有一个问题了:一个被throw的东西到底能够扔多远呢?

以上面的例子来看 如果fun() throw一个 int 那么他飞不了多远就被fun()中的catch(int)给接住了. 而如果fun() throw 一个char*的话,他会被main()中的catch(char *)接住.

总之,throw会被第一个能接住他的catch接住.如果没有catch能接住它的话,程序就终止了. 呵呵

 

这就是我现在对异常的理解.

但是,什么时候用,为什么用,有什么优缺点,我还不了解啊.

 

再总结一下,我脑子中的异常到底是个什么东西

因为程序在运行的过程中可能会遇到各种问题,导致不能进行下去,就如当我们需要用用户输入的两个数相除,如果用户输入的除数是0的话,很显然是不可以的,程序会因为做这个除法而崩溃,也就是说在这一点上会出现潜在的问题(用户可能输入0)应该在这时停止程序的继续运行,而转到处理这个出现的问题上.throw就是用来放在这些可能出问题的点上,一旦出现问题执行了throw的话,程序就会停止向下运行.throw这时会抛出一个东西,这个东西能够告诉程序是出了什么问题,例如,throw抛出了一个"马桶坏了"的东西,那么能够修马桶的catch就会接住它,然后进行处理.而try块的作用应该和堆栈解推有关,相关的问题要看完书才能明白,呵呵 今天要不就先到这..呵呵

还有一个事就是throw一般都会抛出一个类对象,至于为什么要这样,看书在说.