为了账号安全,请及时绑定邮箱和手机立即绑定

请大家帮我看看这个问题

请大家帮我看看这个问题

月亮岛Superman 2017-04-11 11:03:57
我想问下我这个程序  为什么会输出   操作结束try  {}catch(    ){}        当try.......catch  语句补捉到Myexception异常后  应该会终止运行才对啊!       除非在后面加上  finally  {“操作结束‘}才可以输出    这里为什么会输出”操作结束“  ??
查看完整描述

5 回答

已采纳
?
frece

TA贡献36条经验 获得超15个赞

楼主你说的这句话“当try.......catch  语句补捉到Myexception异常后  应该会终止运行才对啊!”

这里你有一个理解错误:如果发生异常你不捕获, 程序才会卡在发生异常的地方,这里你捕获了,程序当然可以继续跑下去啊,否则捕获异常是为了什么呢?

出红字是因为e.printTrace(); 如果你把这行删掉或者换成System.out.println(e.getMessage()); 就没有红字异常了

关于finally: 如果你在try里加一句 int i = 1/0; 他就不会输出 操作结束了,程序会卡在这行代码上因为你并没有捕获除0异常,这个时候如果你加了finally在里边输出“操作结束”,重新跑程序可以输出“操作结束”了但是还是会有报错信息,因为 finally代码块你可以理解为:无论如何都要做里边的事


查看完整回答
2 反对 回复 2017-04-11
  • 月亮岛Superman
    月亮岛Superman
    如果我在try{}语句中添加三个可能出现异常的语句呢 try{ 可能异常代码1; 可能异常代码2; 可能异常代码3; }catch(Exception e){ 处理异常1{}; 处理异常2{}; 处理异常3{}; } 假设我1,2,3中都会出现异常,,,执行到try中的 可能异常代码1 然后交给catch中的处理异常1中 当这个异常处理完成之后呢? 是继续回到try中运行 代码2??还是这段try....catch 代码运行结束?
  • 月亮岛Superman
    月亮岛Superman
    如果你在try里加一句 int i = 1/0; 他就不会输出 操作结束了,程序会卡在这行代码上因为你并没有捕获除0异常 主要对这句不理解 就例如下面这个程序 public class Exercise { public static void main(String[] args) { int a[] = {1,2,3}; boolean hasExseption = false; try { a[3] = 4; int i = 1/0; }catch(Exception e){ System.out.println("数组越界"); hasExseption = true; } if(hasExseption) { System.out.println("程序异常运行结束"); }else { System.out.println("程序正常运行结束"); } } } 例如这个程序 当处理完成 a[3]=4;这个异常后 会继续执行下面的if判断代码,当if判断代码执行完毕后 这个程序也就结束了对吧,就不会处理int i = 1/0;这个异常了把
  • frece
    frece
    第一个问题,如果你的程序有3个地方会发生异常,他跑到第一个异常的时候就会跳到catch,catch也只能捕获这一个异常,不会处理其他的,处理完之后 会继续跑catch之后的内容。 第二个问题,抱歉我表达可能有些问题, 如果try里发生的异常你没有捕获,他会在错误代码那里抛异常,不是卡住不动。 这个问题: 当处理完成 a[3]=4;这个异常后... 程序跑到这会发生数组越界异常,然后会跳到catch找你有没有捕获这个异常,如果没捕获的话程序还是会抛红字异常,如果捕获了就会继续执行,这里你用Exception捕获的所以不会有问题, 你的if判断是在catch之后的,执行完之后当然程序就直接结束了,程序怎么可能倒着跑╮(╯▽╰)╭ 你的代码我给你改了一下,你跑四次, 第一次直接跑, 第二次注释 a[3] = 4; 这一行, 第三次注释 a[3] = 4; int i = 1/0; 这两行, 第四次注释 a[3] = 4; int i = 1/0; 这两行 还有 catch(Exception e){ 这个代码块 看看结果应该就能理解上边说的内容了 public static void main(String[] args) { int a[] = {1,2,3}; boolean hasExseption = false; try { a[3] = 4; int i = 1/0; String str = ""; str = null; int l = str.length(); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("数组越界"); hasExseption = true; } catch(ArithmeticException e){ System.out.println("除零异常"); hasExseption = true; } catch(Exception e){ System.out.println(e.getMessage()); hasExseption = true; } if(hasExseption) { System.out.println("程序异常运行结束"); }else { System.out.println("程序正常运行结束"); } } 注意:如果使用 System.out.println(e.getMessage()); 这种方式查看异常,最后控制台打出 “null”的时候,是空指针异常
?
望远

TA贡献1017条经验 获得超1032个赞

try{
    ....
    int a=2/0;//发生异常
    ....//得不到执行,跳出到catch块
}catch(Exception e)//匹配异常
{
    //执行异常处理。
}finally
{
//不管是否发生异常,finally块都会得到执行。
}
...//继续执行以下代码


查看完整回答
2 反对 回复 2017-04-11
  • 望远
    望远
    写错了finally块都会得到执行。
?
Gatico

TA贡献1条经验 获得超1个赞

谁说try catch 捕获到异常就会停止?捕获到了,因该处理,然后继续执行,程序才不会报错,不然跟不加try catch 有什么区别?

查看完整回答
1 反对 回复 2017-04-12
?
HansonQ

TA贡献223条经验 获得超56个赞

你捕获了,就会继续执行!


查看完整回答
1 反对 回复 2017-04-11
?
夺命小书生

TA贡献19条经验 获得超6个赞

楼主你说的这句话“当try.......catch  语句补捉到Myexception异常后  应该会终止运行才对啊!”

这里你有一个理解错误:如果发生异常你不捕获, 程序才会卡在发生异常的地方,这里你捕获了,程序当然可以继续跑下去啊,否则捕获异常是为了什么呢?

出红字是因为e.printTrace(); 如果你把这行删掉或者换成System.out.println(e.getMessage()); 就没有红字异常了

关于finally: 如果你在try里加一句 int i = 1/0; 他就不会输出 操作结束了,程序会卡在这行代码上因为你并没有捕获除0异常,这个时候如果你加了finally在里边输出“操作结束”,重新跑程序可以输出“操作结束”了但是还是会有报错信息,因为 finally代码块你可以理解为:无论如何都要做里边的事



try{

    ....

    int a=2/0;//发生异常

    ....//得不到执行,跳出到catch块

}catch(Exception e)//匹配异常

{

    //执行异常处理。

}finally

{

//不管是否发生异常,finally块都会得到执行。

}

...//继续执行以下代码


查看完整回答
反对 回复 2017-04-12
?
Caballarii

TA贡献1123条经验 获得超629个赞

如果try/catch捕获异常以后就终止运行,那和不捕获有什么区别,起不到让程序正常执行的作用了。

所以你只是理解错了而已

查看完整回答
1 反对 回复 2017-04-11
  • 5 回答
  • 0 关注
  • 1558 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信