1. finally 是不是一定会执行呢? finally在return之后还是之前执行呢?
实例1:
private static String test(){
String name = "";
try {
name = "zhangsan";
System.out.println("test1:" + name);
return name;
} finally {
name = "lisi";
System.out.println("test2:" + name);
}
}
public static void main(String[] args) {
System.out.println("test3:"+test());
}
运行main方法返回:
test1:zhangsan
test2:lisi
test3:zhangsan
结果:finally 一定会执行,且finally是在return之后执行,且跳出方法栈之前执行
看下面两个例子:
实例2:
/**
*
*/
package com.common.model;
public class NameModel {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "NameModel [name=" + name + "]";
}
}
private static NameModel test2(){
NameModel nameModel = new NameModel();
try {
nameModel.setName("zhangsan");
System.out.println("test1:" + nameModel.getName());
return nameModel;
} finally {
nameModel.setName("lisi");
System.out.println("test2:" + nameModel.getName());
}
}
public static void main(String[] args) {
System.out.println("test3:"+test2());
}
执行main之后返回:
test1:zhangsan
test2:lisi
test3:NameModel [name=lisi]
实例三:
private static String test3(){
NameModel nameModel = new NameModel();
try {
nameModel.setName("zhangsan");
System.out.println("test1:" + nameModel.getName());
return nameModel.getName();
} finally {
nameModel.setName("lisi");
System.out.println("test2:" + nameModel.getName());
}
}
public static void main(String[] args) {
System.out.println("test3:" + test3());
}
执行main返回:
test1:zhangsan
test2:lisi
test3:zhangsan