异常的用法并不是很难,关键在于记住这几个用法。
最基础的就是- try
- {
- 有可能产生异常的一句
- }catch(捕获的异常对象)
- {
- 处理语句
- }finally
- {
- 不管有无异常都要执行的语句
- }
复制代码 以上代码就是捕获异常的基本手法。
其中我感觉有难点的地方就在于这个处理语句上。
处理语句你既可以简单的打印一句话也可以用throw抛出一个异常等等。
如果用throw抛出异常的话又要说道两个关键字:throw和throws。
1)throws只能出现在方法函数头;而throw只能出现在函数体;
2)throws表示出现异常的一种可能性,并不一定会发生这些异常;
下边通过一个简单的例子进行说明:- static void doA() throws Exception1, Exception3 {
- try {
- ……
- } catch(Exception1 e) {
- throw e;
- } catch(Exception2 e) {
- System.out.println("出错了");
- }
- if (a != b)
- throw new Exception3("自定义异常");
- }
- public static void main(String[] args) throws Exception
- {
- doA();
- }
复制代码 说明:
代码块……中可能产生异常Exception1、Exception2和Exception3。
如果产生Exception1异常,则捕捉了之后抛出由该方法的调用者去做处理;
如果产生Exception2异常,则该方法自己做了处理(打印出了说出错了),所以该方法就不会再向外抛出Exception2异常了,
void doA() throws Exception1,,Excpetion3里面的Exception2也就不用写了;
而Exception3异常是该方法的某段逻辑出错,程序员自己作了处理在该段逻辑错误的情况下抛出异常Exception3,则调用者也需要处理。
在主函数中又调用了doA();方法,所以doA()方法中用throws抛出的异常应该在主函数中进行处理,如果主函数不进行处理,可以继续上抛,
将异常抛给Java虚拟机,这样让虚拟机进行处理。
但是如果异常是RuntimeException及其子类的话,不用写throws就可以,因为如果发生此类异常程序将会立即停止运行。
|