设计的关键字: try catch throw
try{}:括起来的是,有可能产生异常的代码;
catch:必须跟在try的后面,一个try后面可以跟多个catch块,每一个catch()的参数列表中,都需要填写一种异常的类型,用来捕获代码抛出的相应的异常数据,在catch块进行处理,处理完成后,代码逻辑继续向下正常运行。throw:用来抛出异常数据的,可以是任意类型的异常数据。
什么是异常的栈展开?(问的就是异常的处理过程)
main -> func1 -> func2 -> func3 -> … -> funcnn-1 -> funcn 从左向右,就是整个函数的调用链当funcn函数栈上抛出异常(throw),首先会看当前funcn有没有try catch能够处理该异常(如果有,
处理完异常,代码继续向下运行),如果funcn没有try catch,那这个异常会沿着函数调用链往上抛
出,在任何一个函数的调用栈上,都做上面的重复处理。如果异常在main函数也没有得到处理,该异常就会抛给系统,系统发现当前进程有一个异常没有被处理,就会强制调用abort函数,直接终止进行的运行。
catch块捕捉异常应该怎么设计?
try{
}catch(int err){}
catch(string err){}
catch(…){} // 捕获捕获任意类型的异常