我们在从事java开发过程中,或多或少都会遇到一些我们程序员不被期望的事件,它会影响整个程序的整体运行,针对此类情况,Java提供了一种专门处理这类问题的机制:异常处理机制。
我们今天就来了解下它是如何来处理异常情况的。
Java异常简介
程序中出现的错误被称为异常
异常可分为两大类:编译时异常和运行时异常;
编译时异常一般是指语法错误,可以通过编译器的提示加以修正,这里我们不予讨论;

运行时异常包括:
运行错误:如数组下标越界,除数为0等;
逻辑错误:如年龄超过200岁等

产生异常的原因多种多样,大致有:
系统资源不可用:如内存分配失败,文件打开失败,数据源连接失败等等;
程序控制不当:如被零除,负数开方,数组下标越界等等。

当异常发生时,程序一般会作出如下反应:
发生异常的部分产生系统定义的错误信息;
程序意外终止,并将控制权返回操作系统;
程序中所有已分配资源的状态保持不变,这样将会导致资源泄漏。
那么我们就必须对有可能产生的异常进行处理
Try块与catch块
try块:一般用来监视有可能产生异常的代码部分;
catch块:当异常产生后,catch块捕捉异常,并在其中对异常进行处理。

代码示例:

finally块
无论try/catch块中发生了什么,finally块都一定会执行;
当异常发生时,程序可能会意外中断,有些被占用的资源就得不到清理。finally块可以确保执行所有的清理工作;
无论是否发生异常,finally块都将执行;
finally块是可选的,可视具体情况决定是否添加;
finally块必须和try块一起使用,不能单独存在

Throw关键字
throw语句用于手工抛出异常;
执行流程将在throw语句后立即停止,转而寻找与之类型相匹配的catch块;
throw语句的语法是:
throw (异常类型的实例);
Throws关键字
如果某个函数中的代码有可能引发异常,可以使用try/catch块进行处理,这种处理方式成为“内部处理”;
如果不方便在函数内部进行处理,也可以将异常往函数外部传递,这就要使用到关键字throws;
throws用于将函数内部产生的异常抛给主调函数;
一般语法:
返回值类型函数名(参数列表) throws异常类型{
……
}
常见的异常类

异常类的体系结构图

我们来总结一下:
异常是运行时产生的错误;
可以使用try/catch/finally块,配合使用来处理异常;
如有多种类型的异常要进行处理,可以使用多重catch块;
要手动发生异常,使用throw关键字;
任何抛到函数外部的异常,都必须使用throws关键字指定其异常类型;
请注意throw和throws的区别;
自定义异常类一般继承于Exception类;
Exception类是绝大部分异常类的父类,在异常类型不明的情况下,可以都认为是Exception。
OK,异常处理机制今天就分享到这里,你是不是学会了呢?
网友评论