什么情况下,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 ");
}
} 展开
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 ");
}
} 展开
4个回答
展开全部
有一种可能会出现没有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
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
展开全部
JAVA中的try{}catch(){}finally{}句型是用来捕获异常的,发生了什么异常就执行哪个catch里面的代码(你对异常进行了分类的情况下,也可以用一个全捕获catch(Exception e){}),至于finall里面的代码,在程序执行了try{}后就一定会被执行(虚拟机突然关闭的情况除外),不管有没有异常发生
所以你的问题的答案就是try{}中没有异常发生时,就会不执行catch,而直接执行finally{}里面的代码
所以你的问题的答案就是try{}中没有异常发生时,就会不执行catch,而直接执行finally{}里面的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果有异常的话
B 中的这个
System.out.print("Exception ");
应该是执行了。
A中没有异常。因为你在B中已经对异常进行过处理,。对于方法A来说B是正确执行,
除非你写成这样, 当B遇到异常时。向A抛出
B 中的这个
System.out.print("Exception ");
应该是执行了。
A中没有异常。因为你在B中已经对异常进行过处理,。对于方法A来说B是正确执行,
除非你写成这样, 当B遇到异常时。向A抛出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
try中的代码没有抛出异常,或者抛出的异常catch中没捕获则不经过Catch而直接跳入finally
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询