下面情况只能try catch,而不用if else.
一、如
fun()
{
fun1();
}
fun1()
{
fun2();
}
fun2()
{
fun3();
}
fun4()
{
}
fun执行了一个连贯动作,如果此时在fun4出现错误,整个连贯动作应立即取消,用if
else的话,需逐层返回,灵活性很差。用try catch马上可以跳到fun函数的catch中,
从而结束整个连贯动作。
二、如
fun
{
if(lib.fun())
{
fun1();
}
}
fun1()
{
}
如上,如果lib库的fun函数throw了一个错误,
(1)此时不会返回FALSE,从而导致调用了fun1。其实fun1没必要被调用,如果有catch
就可以捕获错误从而跳过fun1.
(2)但实际,fun1可能也不会被调用,因为
lib.fun1 throw出的错误会一层一层往外传直到最外层,然后强行把程序给关掉。
但其实lib.fun1出错没有必要退出程序。
三、有些错误没法用if else来判断。
(1)内存耗尽出错,这就需要try catch来捕获系统的错误消息。
(2) 构造函数出错,这就需要在构造函数中throw出错误信息,让外层处理。因为构造
函数没有返回错误的功能。