public class FinallyTest { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
          FinallyTest ft=new FinallyTest();
          System.out.println(ft.f());
         
           

}

public String f(){
String a="";
try{
 a="345";
return a;
}finally{
 a = "678";
}
}
}
为什么最后输出结果是:345
因为finally中的a="678"是执行了的.求教!

解决方案 »

  1.   

    没返回值啊  代码应该如下
    public class FinallyTest { /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
              FinallyTest ft=new FinallyTest(); 
              System.out.println(ft.f()); 
            
              } public String f(){ 
    String a=""; 
    try{ 
    a="345"; }
    finally{ 
    a = "678"; 
    return a; // 返回值


      

  2.   

    或者把 return a 放到 finally外面这样没警告
    public class FinallyTest { /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
              FinallyTest ft=new FinallyTest(); 
              System.out.println(ft.f()); 
            
              } public   String f(){ 
    String a=""; 
    try{ 
    a="345"; }
    finally{ 
    a = "678"; }
    return a;   //finally 外面

      

  3.   

    finally就是这样,不管发生什么样的情况都会被执行!
      

  4.   

    我当然知道finally会执行,但是:
    为什么最后打印出来a的值还是345????
      

  5.   

    楼主,看看return在哪个语句中就知道了!加两个输出语句,你就能深入理解这个问题了!
    public class FinallyTest { /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
              FinallyTest ft=new FinallyTest(); 
              System.out.println(ft.f()); 
            
              } public   String f(){ 
    String a=""; 
    try{ 
    a="345"; System.out.println("try-one"); 
    return a; 
    }
    finally{ 
    a = "678"; 
    System.out.println("try-two");  }} 
      

  6.   

    能打印出“try-two”说明finally已经执行了,只是没有返回值!
      

  7.   

    当然执行了,只是没有返回值,在finally块中加个return a;就是你要的结果678了~finally{ 
    a = "678"; 
    return a;} 
      

  8.   

    fianlly不管发生什么总是被执行的,但是有一种情况除外。
    例如等待用户输入数据的时候,你没有输入直接让程序停止,那么FIANLLY也是不会执行到的。
    对于楼主说的问题,
    我认为可以这样理解:try{ 
    a="345"; 
    return a; //返回的是A当前的值
    }finally{ 
    a = "678"; //在返回值后A的值改变,但是没有返回当前A改变后的值
    } 也就是说,调用这个方法以后A的值为“678”了,但是并没有返回这个值!如果变一下:
    try{ 
    a="345"; 
    return a; 
    }finally{ 
    a = "678"; 
    return a; 

    不管发生什么,返回的值绝对是“678”
      

  9.   

    虽然最后执行finally
    但是return不会最后执行啊
      

  10.   

    定义的是String a="";
    a是个字符串 
    a="345"; "345"是个字符串 没有异常所以输出345