程序try-catch的绝对健壮性之嵌套

Posted jerryqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序try-catch的绝对健壮性之嵌套相关的知识,希望对你有一定的参考价值。

写程序的过程中,我们对try-catch在熟悉不过了,捕获异常进行处理,以保证程序的健壮性。

今日突发一想,如果我们catch中的代码异常了怎么办?我们做以下一种假设

static void Main(string[] args) 
{
    try{
        //Code A
    }
    catch{
        //Code B
    }
    finally{
        //Code C
    }
} 

按照我们平时经常用的,我们在Code A的位置执行出错之后,我们最后可能在Code B进行错误处理,然后可能在Code C处写错误日志。

那么问题来了,如果我们因为某些不可预测的因素在Code B或者Code C处又出异常了怎么办?(虽然这种情况我没有遇到过,哈哈)

那么程序员以钻牛角尖的态度实现了以下结构

static void Main(string[] args) 
{
    try{
        //Code A
        try{
            //Code B
        }
        catch{
            //Code C
        }
        finally{
            //Code D
        }
        //Code E
    }
    catch{
        //Code F
    }
    finally{
        //Code G
    }
}

按照这种结构,我们在Code F和G的位置不写任何代码(不写总不会异常吧?)或者写上绝对无错的代码,主题代码还是在Code B的位置,C的位置异常处理,D的位置写日志。

那么,就算catch和finally异常了,也会被外层的catch捕获,这样是不是就绝对的健壮了?

以上是关于程序try-catch的绝对健壮性之嵌套的主要内容,如果未能解决你的问题,请参考以下文章

try-catch异常处理

异常和TCP通讯

Close-SMBOpenFile引发错误,没有被try-catch捕获

C# try-catch

Java多线程安全原子性之AtomicCASSynchronized和Lock

java异常 throw和try-catch的关系