结论:
常量类型 finally 中没有 renturn 不会影响返回值. finally 中有 renturn 会影响返回值.
可见引用类型时finally有没有return都会对当前方法的返回值产生影响.
================================================
1. finally 中没有return
public class Main {
private static int a=2;
public static void main(String[] args) {
System.out.println("test输出的结果 "+test());
System.out.println("main 自加后 a="+(a++));
}
private static int test(){
try {
a+=3;
System.out.println("try a="+a);
return a;
}catch (Exception e){
}finally {
++a;
System.out.println("finally a="+a);
}
return 0;
}
}
==============================================
try a=5
finally a=6
test输出的结果 5
main 自加后 a=6
结果:
执行顺序 try => finally => main
在finally中并不会影响返回值
2.finally 中有 return
private static int test(){
try {
a+=3;
System.out.println("try a="+a);
return a;
}catch (Exception e){
}finally {
++a;
System.out.println("finally a="+a);
return a ;
}
}
=================================================
try a=5
finally a=6
test输出的结果 6
main 自加后 a=6
结果:
执行顺序 try => finally => main
在finally中会屏蔽方法返回值
3. 引用变量 finally 中没有 return
private static List<String> list=new ArrayList<>();
public static void main(String[] args) {
System.out.println("test输出的结果 "+test());
System.out.println("main list="+list.toString());
}
private static List test(){
try {
list.add("33");
System.out.println("try list="+list.toString());
return list;
}catch (Exception e){
}finally {
list.add("66");
System.out.println("finally list="+list.toString());
}
return null;
}
================================================
try list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]
结果:
执行顺序 try => finally => main
在finally中会添加值.
3. 引用变量 finally 中没有 return
private static List<String> list=new ArrayList<>();
public static void main(String[] args) {
System.out.println("test输出的结果 "+test());
System.out.println("main list="+list.toString());
}
private static List test(){
try {
list.add("33");
System.out.println("try list="+list.toString());
return list;
}catch (Exception e){
}finally {
list.add("66");
System.out.println("finally list="+list.toString());
return list;
}
}
private static int test02(){
try {
a+=3;
System.out.println("try a="+a);
return a;
}catch (Exception e){
}finally {
++a;
System.out.println("finally a="+a);
return a ;
}
}
================================================
try list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]
结果:
执行顺序 try => finally => main
在finally中会添加值.