java异常处理概述_16.1 Java异常处理机制概述(2)

16.1  Java异常处理机制概述(2)

例如,当methodA()方法抛出SpecialException时,如果在该方法中提供了捕获SpecialException的catch代码块,就执行这个异常处理代码块。如果methodA()方法未捕获该异常,而是采用第二种方式声明抛出SpecialException,那么Java虚拟机的处理流程将退回到上层调用方法methodB(),再察看methodB()方法有没有捕获SpecialException。如果在methodB()方法中存在捕获该异常的catch代码块,就执行这个catch代码块,此时methodB()方法的定义如下:public void methodB(int status){

try{

methodA(status);

}catch(SpecialException e){

处理异常

}

}

由此可见,在回溯过程中,如果Java虚拟机在某个方法中找到了处理该异常的代码块,则该方法的栈结构将成为栈顶元素,程序流程将转到该方法的异常处理代码部分继续执行。

如果methodB()方法也没有捕获SpecialException,而是声明抛出该异常,那么Java虚拟机的处理流程将退回到main()方法,此时methodB()方法的定义如下:public void methodB(int status) throws SpecialException{

methodA(status);

}

当Java虚拟机追溯到调用栈的***部的方法,如果仍然没有找到处理该异常的代码块,将调用异常对象的printStackTrace()方法,打印来自方法调用栈的异常信息,随后整个应用程序被终止。例如运行例程16-1(Sample.java),将打印如下异常信息:Exception in thread "main" SpecialException: Monster

at Sample.methodA(Sample.java:4)

at Sample.methodB(Sample.java:10)

at Sample.main(Sample.java:15)

例程16-1  Sample.javapublic class Sample{

public void methodA(int status)throws SpecialException{

if(status==-1)

throw new SpecialException("Monster");

System.out.println("methodA");

}

public void methodB(int status)throws SpecialException{

methodA(status);

System.out.println("methodB");

}

public static void main(String args[])throws SpecialException{

new Sample().methodB(-1);

}

}

SpecialException类表示某种异常,例程16-2是它的源程序。

例程16-2  SpecialException.javapublic class SpecialException extends Exception{

public SpecialException(){}

public SpecialException(String msg){

super(msg);

}

}

为了便于让读者理解Java异常处理机制,可以再打一个通俗的比方。假定methodA()方法模拟孙悟空的护送唐僧西天取经的行为,methodB()方法模拟观音菩萨的关照唐僧师徒西天取经的行为,把methodA()方法中出现的SpecialException比做西天取经中遇到的妖怪。如果悟空自己有能力消灭妖怪,就自己在methodA()方法中通过try-catch语句来抓获并消灭它,否则,就仅通过throws语句声明:"我可能会遇到妖怪,我自己没办法对付。"这样,消灭妖怪的任务就转交给观音菩萨来处理。同样,如果观音菩萨自己有能力消灭妖怪,就自己在methodB()方法中通过try-catch语句来抓获并消灭它,否则,就仅通过throws语句声明:"我可能会遇到妖怪,我自己没办法对付"。

更具体的情况是,有些妖怪悟空自己能消灭,有些妖怪则要靠其他神仙来降伏,那么,methodA()方法可以按如下方式实现:/** 模拟孙悟空的护送唐僧西天取经的行为 */

public void methodA() throws 红孩儿异常,

六耳猕猴异常,黑熊怪异常{

try{

护送唐僧西天取经

}catch(白骨精异常 e){

三打白骨精

}catch(黄狮精异常 e){

用金箍棒将其消灭

}catch(花豹精异常 e){

用金箍棒将其消灭

}

}

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值