日期:2014-05-19  浏览次数:20667 次

求大神们相助····
class text{  
  public static void main(String[] args) {  
  System.out.println(testt());
  System.out.println(x); 
   
  }  
   
  static int x = 99;
  public static int testt() {  
  try {  
  return x;  
  } catch (Exception e) {  
  } finally {  
  x = 8;
   
  }  
  return x;  
  }  
}  
 运行结果为:
99
8
按顺序执行为什么第二个为8?

------解决方案--------------------
finally中没有return,返回的是try或catch里的return,此题是try中的return。但是如LZ所知finally在return前执行,为什么finally对返回值x的修改没有起到作用?因为方法在return的时候并不是把它拥有的那个值给返回了,而是把x复制了一份返回。
所以99是x在finally前的复制,8是finally操作后x所存储额定值!

总之:第一个返回的是x在finally前的复制值,第二个是直接返回的x