1,finally中不带有return
1.1
当类型为基本类型时,当try中带有return时,会先执行return前面的代码,然后将需要返回的信息暂时保存,然后执行finally中的代码,最后在返回之前保存的信息。
1.2
当类型为引用类型时,如集合,集合里存放的是变量的地址,而不是变量本身,当finally通过地址改变了变量,会影响return的值,
(个人拙见,string里直接赋值是存在字符串池中,不是地址,因此string也不会改变。stringbuffer也不会改变)
2,finally中带有return
try中的return会失效,finally中的return会覆盖try的return,但是不建议这么写,因为,会破坏程序的完整性,一旦finally报异常会覆盖catch中的异常
public class Test1 {
//当finally中没有return时,会正常返回try中的return,
public String name() {
String x=“123”;
try {
//System.out.println(x);
return x;
}
finally {
x="123456";
//System.out.println(x);
//return x;
}
}
private List<Integer> testReturn2() {
List<Integer> list = new ArrayList<>();
try {
list.add(1);
System.out.println("try:" + list);
return list;
} catch (Exception e) {
list.add(2);
System.out.println("catch:" + list);
} finally {
list.add(3);
System.out.println("finally:" + list);
}
return list;
}
public StringBuffer name1() {
StringBuffer a =new StringBuffer("123");
try {
return a;
}
finally {
a=new StringBuffer("222222");
}
}
public static void main(String[] args) {
System.out.println(new Test1().name());
System.out.println(new Test1().name1());
System.out.println(new Test1().testReturn2());
}
}
打印:
123
123
try:[1]
finally:[1, 3]
[1, 3]