如果我不考虑异常丢失的情况下
还有别的限制要求try后面一定要跟catch吗
请看下面两段代码
int i = 1;
try
{
i = 2;
return i;
}
finally
{
i = 3;
System.out.println("finally block executed");
}
//执行结果是
//finally block executed
//2
//间接证明了finally在return的前面执行
然而加上catch之后
int i = 1;
try
{
i = 2;
return i;
}catch(Exception e){
}finally
{
i = 3;
System.out.println("finally block executed");
return i;
}
//不但编译通不过了而且结果完全不同
//结果是
//finally block executed
//3
//这样的话finally是在return后面执行
两段程序的执行结果完全不一样
就因为多了个catch
请教各位大牛可否给予一个比较详细的解释 感激不尽
------解决方案--------------------
应该是你finally多了个 return
------解决方案--------------------
两段程序的执行结果完全不一样
就因为多了个catch
其实不是这样吧lz可以把第二段代码的finally中的return语句放到catch语句中这样结果就一样了。
------解决方案--------------------
1 finally肯定在try return和catch return之前执行,这不会有问题的。
2 finally中如果有return就会将try return和catch return作废掉(不给它们执行的机会)
------解决方案--------------------
没有限制必须在try后面加catch,完全可以把一般捕捉异常的代码分离成
try {
try {
............
}
catch(){
}
}
finally{
}
返回值的改变并不是因为catch的原因,而是当finally中有return语句的时候,try中的return会被抛弃,执行finally的return并返回值。
------解决方案--------------------
int i = 1;
try
{
i = 2;