请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于try。。。catch范围不同而出现的问题

Runnable runnable = ()->{
int i=0;
while (i<9999) {
if(i%2 == 0){
System.out.println(“偶数:”+i);
}
i++;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(“输出完毕,程序结束”);
};

当try catch只包含到Thread.sleep()的时候,第一次进入到休眠接收到中断信号后catch住了异常并打印出来,但是程序后面还会继续执行打印 偶数 ,后面也不会再次中断。
try catch包住整个while的时候,第一次进入sleep然后catch了异常,程序就会停止了。
我想请问悟空老师,为什么会这样?try catch的范围影响这么大吗?

正在回答

1回答

本质是因为catch后,程序会继续执行catch后面的其它语句。

因为sleep接收到中断信号后,会把本次的中断信号自动清除,所以“当try catch只包含到Thread.sleep()的时候,第一次进入到休眠接收到中断信号后catch住了异常并打印出来,但是程序后面还会继续执行打印 偶数 ,后面也不会再次中断。”,这时catch后面的其它语句就是while剩下的语句。

“try catch包住整个while的时候,第一次进入sleep然后catch了异常”,然后由于catch后面的其它语句已经没有了,所以程序就停止了。

2 回复 有任何疑惑可以回复我~
  • 提问者 qq_小庄_1 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-08-23 09:45:00
  • 提问者 qq_小庄_1 #2
    我是看了5-4自己写的时候遇到这个情况,其实5-5,5-6后面的课程老师你有讲这种情况。我这是先知先觉吗哈哈哈哈哈哈
    回复 有任何疑惑可以回复我~ 2019-08-23 09:47:05
  • 悟空 回复 提问者 qq_小庄_1 #3
    哈哈哈是的,说明你思考问题的能力强
    回复 有任何疑惑可以回复我~ 2019-08-23 12:05:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信