[求助]一个异常处理问题
下列语句中第二个语句S2出现了一个异常,那么
try{
S1;
S2;
S3;
}catch(ExceptionType e1){}
catch(ExceptionType e2){}
S4;
问题
1:S3会执行吗?
2:如果异常未被捕获,S4会被执行吗?
3:如果catch子句捕获了异常,S4会执行吗?
请说明原因.
多谢!
----------------解决方案--------------------------------------------------------
1:不会,
2:不会 清除堆栈,将结束 try/catch所在的方法,由掉用该方法的块捕捉,如没有捕捉,再结束,真到main结束.
3:会
----------------解决方案--------------------------------------------------------
1
如果你S1和S2没的错误的话 S3是会执行的 否则就不会 应为会直接跳到Catch语句里了
2
如果异常未被捕获,S4会执行
3
如果catch子句捕获了异常 处理完后 会从整个try/catch块下面的一行继续 也就是说 会继续执行
----------------解决方案--------------------------------------------------------
怎么2楼的和3楼的第二题回答不一样? 那究竟是会还是不会呢?
----------------解决方案--------------------------------------------------------
1
我和他回答的都一样
2
既然异常没被捕获 S4为什么不执行呢?
3捕获了 一般来说会执行的 象我说的 会从整个try/catch块下面的一行继续 但要看你catch里的语句是怎么写的了
----------------解决方案--------------------------------------------------------
补充:
1:不会 语句中第二个语句S2出现了一个异常,就会在S2句停止执行.检查catch(){}块.
2:不会 清除堆栈,将结束 try/catch所在的方法,由掉用该方法的块捕捉,如没有捕捉,再结束,真到main结束.
3:会 如果catch子句捕获了异常 处理完后 会从整个try/catch块下面的一行继续 也就是说 会继续执行
另外: 如果有finally,那么不管有什么情况,finally{}块里的代码都要被执行.
----------------解决方案--------------------------------------------------------
引用5楼话:
2
既然异常没被捕获 S4为什么不执行呢?
这是因为try/catch没有捕捉到发生的异常,则把该异常提交给他的上级处理,由上级捕捉.
如果还没有捕捉到,再提交,知道给他的顶层线程,如还不能结束此线程.
----------------解决方案--------------------------------------------------------
说来说去 我们只是第2点不一样
那只有等版主来裁决了
----------------解决方案--------------------------------------------------------
s4是在try块外面的,所以不论是否发生异常都是会执行的,除非在处理异常时将程序结束。
在try块里面,无论哪一条语句发生异常,都是会直接跳转到catch里面进行异常处理
如果在try块里面没有发生异常,则顺序执行。
----------------解决方案--------------------------------------------------------
那我说的还是对的嘛 没错啊
----------------解决方案--------------------------------------------------------