日期:2014-05-20  浏览次数:21051 次

try后面一定要有catch吗
如果我不考虑异常丢失的情况下
还有别的限制要求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;