帮帮忙 跪求解决方案

帮帮忙 跪求
public class test {
public String getValue(){
String value ="";
try{
value = "test1";
return value;
}catch (Exception e){
e.printStackTrace();
}
finally{
value= "test2";
}
return value;
}
public static void main (String[] args){
test test = new test();
String a = test.getValue();
System.out.println(a);
}
}

为什么不是test2 是test1呢 
try{
value = "test1";
return value;
}
中的return value 什么意思?

------解决方案--------------------
return value方法的返回值

finally在return之前执行

------解决方案--------------------
有两点要明确
第一,finally的代码块是否被执行
第二,返回值return到底返回什么状态的值,也就是return value用那个状态的value

第一,finally代码确实被执行,可以println一下会有
第二,代码的return value返回值的确定在这个时候已经判定,下面即便再改value的值也是返回return value之前的的值
第三,当有多个return 语句的时候,返回值由第一个return满足条件的语句确定返回值
------解决方案--------------------
finally代码块虽然在return语句之前被执行,但finally代码块不能通过重新给变量赋值的方式来改变return语句的返回值。
------解决方案--------------------
探讨
为什么不是test2 是test1呢
try{
value = "test1";
return value;
}
中的return value 什么意思?

------解决方案--------------------
很明显。。try执行完以后,已经返回return value="test1"了。后面finally里面的语句重新赋值已经无效了。。无法影响已经前面返回的值。。。而并非是先执行finally里面的内容。