/*
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。*/

解决方案 »

  1.   

    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行
            }
        }