/*
2008年9月21日12:10:47
忙了一上午,上网差了n份资料,最终小弟得出了“finally 与 return 区别”
不对之处 恳请诸位牛人指正!
*/
class M
{ private static int a = 0;    public static void main(String[] args) 
{
show();
System.out.println(returnValue());
show();
    } public static void show()
{
System.out.printf("a = %d\n", a);
}
    
    public static int returnValue()
{
        a = 1;   
System.out.println("a = " + a);
        try
{                
            a = 2;     
System.out.println("a = " + a);
System.out.println("张三!");
            return (a=5);   //26行    
//System.out.println("哈哈!"); //return后面不能再有其他代码 否则编译时会报错

finally 
{            
            System.out.println("李四!");  
System.out.println("a = " + a);
a = 3;
System.out.println("a = " + a);
return (a=14);  //35行
}
    }
}
/*
在JDK 1.6中的运行结果是:
------------------------
a = 0
a = 1
a = 2
张三!
李四!
a = 5
a = 3
14
a = 14
------------------------

注释掉26行代码 ,则在JDK 1.6中的运行结果是:
-----------------------
a = 0
a = 1
a = 2
张三!
李四!
a = 2
a = 3
14
a = 14
-----------------------
注释掉35行代码,在JDK 1.6中的运行结果是:
-------------------------
a = 0
a = 1
a = 2
张三!
李四!
a = 5
a = 3
5
a = 3
-------------------------

总结:
本程序形象的证明了:
  如果try和finally中都有return时,肯定先执行try中的return,再执行
finally中的return, 因此最终返回值是finally中的return,也就是说虽然try
中的return也执行了,但finally中的return最终却覆盖了try中的return。*/