1、介绍:try catch finally语句常用来进行系统异常捕获,在实际的工作中可以在catch语句块中记录系统异常日志。finally语句块是无论前面逻辑代码是否有异常,其内部的语句都会执行。常用于流的关闭等操作
2、分析
private static int testNomal()
{
int x = 1;
try
{
x += 100;//x等于101
return x;//返回101
}
catch (Exception)
{
return 0;//无异常,不执行
}
finally
{
x += 100;//x等于201
}
return x;//不执行
}
//无异常状态下,最终返回101
说明:如果try语句块中没有错误并有return语句,则返回的执行完中即返回结果值,然后继续执行finally块中的语句。
private static int testNomal()
{
int x = 1;
try
{
x += 100;//x等于101
}
catch (Exception)
{
return 0;//无异常,不执行
}
finally
{
x += 100;//x等于201
}
return x;//返回201
}
//无异常状态下,最终返回201
说明:如果try块中的语句没有return,则执行finally中的语句库,如果遇到return 则返回,后面的语句不会再执行。如果finally中也没有return,则根据最终的return结果进行返回
private static int testException()
{
int x = 1;
try
{
x = Convert.ToInt32("aa");//报异常,跳转到catch语句
return x;//不执行
}
catch (Exception)
{
return 0;//返回0
}
finally
{
x += 100;//x等于101
}
return x;//不执行
}
说明:如果try语句块中存在异常,则异常语句后的代码不再执行,直接跳转到catch语句块中进行执行,如果catch中有return语句,则返回,catch中return语句后的代码不再执行,而是执行finally块中的语句。如果catch中没有return语句,则继续执行,知道遇到return语句时才进行结果返回。
重复强调:无论是否存在异常finally中的语句都会执行