上一段代码
public static int testTry(){
int i = 1;
try {
i++;
System.err.println("我是try中return前的正常方法...."+i);
return i;
}catch (Exception e){
i++;
System.err.println("我是catch中的方法执行...."+i);
}finally {
i++;
System.err.println("我是finally中的正常方法....."+i);
}
System.err.println("我是try catch外的方法,我执行了吗?");
return i;
}
public static int testCatch(){
int i = 1;
try {
int i1 = i / 0;
System.err.println("我是try中return前的正常方法...."+i);
}catch (Exception e){
i++;
System.err.println("我是catch中的方法执行...."+i);
return i;
}finally {
i++;
System.err.println("我是finally中的正常方法....."+i);
}
System.err.println("我是try catch外的方法,我执行了吗?");
return i;
}
public static void main(String[] args) {
int i = testTry();
System.err.println("testTry方法执行结束...."+i);
System.err.println("=========================================");
int i1 = testCatch();
System.err.println("testCatch方法执行结束..."+i1);
}
总结:
基本数据类型
finally最终都会执行;
return 之前的数据不会变化,即使后面finally对数据进行了增加;
public static List testTry(){
List result = new ArrayList();
try {
result.add("1");
System.err.println("我是try中return前的正常方法...."+result.size());
return result;
}catch (Exception e){
result.add("2");
System.err.println("我是catch中的方法执行...."+result.size());
}finally {
result.add("3");
System.err.println("我是finally中的正常方法....."+result.size());
}
System.err.println("我是try catch外的方法,我执行了吗?");
return result;
}
public static List testCatch(){
List result = new ArrayList();
try {
Object o = result.get(100);
System.err.println("我是try中return前的正常方法...."+result.size());
}catch (Exception e){
result.add("5");
System.err.println("我是catch中的方法执行...."+result.size());
return result;
}finally {
result.add("6");
System.err.println("我是finally中的正常方法....."+result.size());
}
System.err.println("我是try catch外的方法,我执行了吗?");
return result;
}
public static void main(String[] args) {
int i = testTry().size();
System.err.println("testTry方法执行结束...."+i);
System.err.println("=========================================");
int i1 = testCatch().size();
System.err.println("testCatch方法执行结束..."+i1);
}
此时验证的结果就会发现,当时引用数据类型的时候,这个值就变化了....
一个是基本数据类型,一个是引用数据类型,这样就很容易理解了....
引用数据类型拿到是List的地址库引用,后期对该引用对应的值进行了更改,所以再去size的时候,是有变化的,也是可以解释得通的..并不悖于上面的结论;
return先将结果保留,等执行完finally后再返回给调用者;