什么情况下,JAVA中执行代码出异常时不经过Catch而直接跳入finally

我有两个方法,A和B,A调用B,当B方法执行到XSSFWorkbookwb=newXSSFWorkbook();时,后面的代码都没有执行,也没进行Catch中,就直接跳入... 我有两个方法,A和B,A调用B,当B方法执行到
XSSFWorkbook wb = new XSSFWorkbook();时,后面的代码都没有执行,也没进行Catch中,就直接跳入到A方法的finally 中。请高手指教这是为什么?
A(){
try{
b();
}cathc(Exception e){
System.out.print("error");
}finally {
System.out.print("finally ");
}

B() throws Exception {
try{
XSSFWorkbook wb = new XSSFWorkbook();
System.out.print("new XSSFWorkbook ");
...
}catch(Exception e) {
System.out.print("Exception ");
}
}
展开
 我来答
axblunt
推荐于2018-04-12 · TA获得超过466个赞
知道答主
回答量:93
采纳率:0%
帮助的人:151万
展开全部
有一种可能会出现没有catch异常的情况:当抛出的不是Exception及其子类时,catch(Exception e)将无法捕获该异常。请看如下代码:
public static void main(String[] args) throws Throwable {

try{
throw new Throwable(){

};
}
catch(Exception e){
System.out.println("err");
}
finally{
System.out.println("finally");
}

}
就会不经catch而到输出 finally。

有一个测试方法是加入catch(Throwable t)即可发现是否有上述情况,示例如下:
public static void main(String[] args) throws Throwable {

try{
throw new Throwable(){

};
}
catch(Exception e){
System.out.println("err");
}
catch(Throwable t){
System.out.println("t");
}
finally{
System.out.println("finally");
}

}

这就会输出
t
finally
百度网友6849f81cb
2010-04-01
知道答主
回答量:26
采纳率:0%
帮助的人:7.3万
展开全部
JAVA中的try{}catch(){}finally{}句型是用来捕获异常的,发生了什么异常就执行哪个catch里面的代码(你对异常进行了分类的情况下,也可以用一个全捕获catch(Exception e){}),至于finall里面的代码,在程序执行了try{}后就一定会被执行(虚拟机突然关闭的情况除外),不管有没有异常发生

所以你的问题的答案就是try{}中没有异常发生时,就会不执行catch,而直接执行finally{}里面的代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友77560bd
2010-04-01 · TA获得超过276个赞
知道小有建树答主
回答量:402
采纳率:0%
帮助的人:351万
展开全部
如果有异常的话
B 中的这个
System.out.print("Exception ");
应该是执行了。
A中没有异常。因为你在B中已经对异常进行过处理,。对于方法A来说B是正确执行,
除非你写成这样, 当B遇到异常时。向A抛出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
早高诚02
2010-04-01 · TA获得超过591个赞
知道答主
回答量:130
采纳率:0%
帮助的人:121万
展开全部
try中的代码没有抛出异常,或者抛出的异常catch中没捕获则不经过Catch而直接跳入finally
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式