最近专门再网上收集了再trycatchfinally中return的使用、得到得答案好像都是这样的、return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。
也对如下代码进行了验证:
package com.wxhx.java.exception;
public class ExceptionTest2

         public static void main(String[] args) {
   System.out.println("=============test1==================");
   System.out.println(test1());
   System.out.println("===============================");    System.out.println("=============test1_1==================");
   System.out.println(test1_1());
   System.out.println("===============================");
        }
       
       public static String test1() {
   String a = "in try";    try {
    return a;
   } catch (Exception e) {    } finally {
    a = "in finally";
    System.out.println("do finally");
   }    return a;
} public static String test1_1() {
   String a = "in try";    try {
    return a;
   } catch (Exception e) {    } finally {
    a = "in finally";
    System.out.println("do finally");
    return a;
   }
}
}那我再想一段普通代码的return、如下:     public String getName()
     {
         String name = "aaa";
         return name+"bbb";
     }
实现的原理还是return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。不知其原理、寻求高手解答、并能告诉我参考资料、谢谢。

解决方案 »

  1.   

    没有什么复制不复制的,finally 在 return 之前运行。
      

  2.   

    视频教程:http://www.cdlanhai.com/zxst/
      

  3.   

    finally 在 return 之前运行zi ji debug yi xia jiu quan ming bai le , bu yao zhi kan jie guo
      

  4.   

    public String getName() 
        { 
            String name = "aaa"; 
            return name; 
        } 
    如上一段代码是不是会在栈中重新生成一个引用(即复制一份引用)、然后返回的是复制引用所指向的对象呀???