java 16 规定_16.1 Java异常处理机制概述(1)

第16章  异常处理

2010年的中国上海世博会可谓家喻户晓,可是你知道吗,每年夏季,花果山也会举办隆重的蟠桃博览会,来自天上和人间的游客络绎不绝。游客们参观蟠桃博览会的正常流程是:

入花果山登记

游玩

离开花果山

偶尔也会发生一些异常情况,例如在游玩过程,有的游客迷了路,还有的游客忽然疾病发作。去年有一位小猪游客冒失地一口吞一只硕大的桃子,结果桃子卡在喉咙,由于未得到及时治疗,***给噎死了。

为了让游客能平平安安地在花果山游玩,对于今年的蟠桃博览会,悟空对可能出现的突发性异常提前做了充分准备。悟空动员一千只猴子充当蟠桃博览会的志愿者,如果游客迷了路,可以随时向志愿者问路。悟空还组织了若干支医疗队随时待命,以便及时抢救那些疾病发作的游客。

Java程序在运行过程中也会遇到异常情况,如果预先就估计到了可能出现的异常,并且准备好了处理异常的措施,那么就会防微杜渐,降低突发性异常发生时造成的损失。Java语言用try-catch语句来处理异常:public void travel(){ /* 模拟游客游览花果山蟠桃博览会的行为 */

try{

/* 正常流程  */

入花果山登记

游玩

离开花果山

}catch(迷路异常 e){   /* 处理迷路异常的流程 */

向志愿者询问路线

在志愿者的帮助下到达目的地

}catch(疾病发作异常 e){  /* 处理疾病发作异常的流程 */

找医疗队救助

}

}

本章将介绍Java语言提供的完善的异常处理机制。正确运用这套机制,有助于提高程序的健壮性。所谓程序的健壮性,就是指程序在多数情况下能够正常运行,返回预期的正确结果;如果偶尔遇到异常情况,程序也能采取周到的解决措施。而不健壮的程序则没有事先充分预计到可能出现的异常,或者没有提供强有力的异常解决措施,导致程序在运行时,经常莫名其妙地终止,或者返回错误的运行结果,而且难以检测出现异常的原因。

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

Java虚拟机用方法调用栈(method invocation stack)来跟踪一系列的方法调用过程。该堆栈保存了每个调用方法的本地信息(比如方法的局部变量)。当一个新方法被调用时,Java虚拟机把描述该方法的栈结构置入栈顶,位于栈顶的方法为正在执行的方法。图16-1描述了方法调用栈的结构。在图16-1中,方法的调用顺序为:main()方法调用methodB()方法,methodB()方法调用methodA()方法。

3f4ce6f48e57e1a1d9b31c13ba7798e6.png

图16-1  Java虚拟机的方法调用栈

当methodB()方法调用methodA()方法,为了叙述的方便,本书有时把methodB()称为methodA()的方法调用者。

如果方法中的代码块可能抛出异常,有两种处理办法:

(1)如果当前方法有能力自己解决异常,就在当前方法中通过try-catch语句捕获并处理异常,例如:public void methodA(int status){

try{

//以下代码可能会抛出SpecialException

if(status==-1)

throw new SpecialException("Monster");

}catch(SpecialException e){

处理异常

}

}

(2)如果当前方法没能力自己解决异常,就在方法的声明处通过throws语句声明抛出异常,例如:public void methodA(int status) throws SpecialException{

//以下代码可能会抛出SpecialException

if(status==-1)

throw new SpecialException("Monster");

}

当一个方法正常执行完毕,Java虚拟机会从调用栈中弹出该方法的栈结构,然后继续处理前一个方法。如果在执行方法的过程中抛出异常,Java虚拟机必须找到能捕获该异常的catch代码块。它首先察看当前方法是否存在这样的catch代码块,如果存在,就执行该catch代码块;否则,Java虚拟机会从调用栈中弹出该方法的栈结构,继续到前一个方法中查找合适的catch代码块。

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

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值