try ---catch---finally
//1.把可能发生异常的代码用try块包起来,当程序在某条语句发生异常后,会直接跳转到catch块中,异常代码后的代码都不会执行了
//2.只有当try块中发生异常后,程序才会跳转到catch块中执行,如果不发生异常,catch块的代码不会被执行
//3.finally中的代码无论程序是否发生异常,均会执行,所以一般会把一些释放内存、释放资源的代码放到finally中,
这样会保证这些代码一定会执行
//4.即便在try块中有return语句,finally块中的代码还是会执行,finally块中不能包含return语句
catch块的三种写法:
1.catch块中第一种写法,这种写法可以捕获所有的异常
catch
{
Console.WriteLine("异常了~~~~");
}
2.catch块中第二种写法,如果参数类型为Exceotion
表示可以捕获所有的异常
catch(Exception ex)
{
Console.WriteLine("异常详细信息:{0}",ex.Message);
}
3.catch块中第三种写法,如果参数类型为NullReferenceException,表示只能捕获空指针异常,
这种写法只能捕获特定的异常,其实就是对不同的异常分别捕获,可以对不同的异常单独处理
catch (NullReferenceException ex)
{
Console.WriteLine("异常详细信息:{0}", ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("又异常了:{0}", ex.Message);
}
// *****注意事项:捕获所有异常的catch不能写在具体异常之前
catch(Exception ex)
{
Console.WriteLine("异常了~~~:{0}",ex.Message);
}
手动抛出自己的异常用 throw new Exception("哈哈哈,抛出异常了!");
直接写throw;只能用在catch块中,表示不处理异常,向上抛出异常
建议:通过逻辑判断(if-else语句)减少异常的发生的可能性
在多级方法嵌套的时候,如果发生了异常,则会终止所有相关方法的调用,并且释放相关的资源
|