public boolean returnTest() { try { return true; } catch (Exception e) { } finally { return false; } }以上代码返回值是什么?
public static int returnTestInt(){ int a = 0; try { return a++; } catch (Exception e) { } finally { return ++a; } }
public static String test() {
String a = "初始化";
try {
System.out.println("执行try块");
return a = "try返回";
} catch (Exception e) {
}finally {
System.out.println(a);
System.out.println("执行finally块");
return "finally返回";
}
} public static void main(String[] args) { System.out.println(test()); }
大家看这里:
package com.niuke.Test;
public class returnTestInt {
public static int test(){
int a = 0;
try {
return ++a;
} catch (Exception e) {
} finally {
System.out.println("你好");
}
return ++a;
}
public static void main(String [] args){
System.out.println(test());
}
}
运行结果:
你好
1
为什么会这样,那是因为如果try中有return,而finally中没有return,那么finally中的代码会在try中return执行前执行,所以会输出你好,然后再执行try中return,因此最后的return就不会执行了。
public class returnTestInt {
public static int test(){
int a = 0;
try {
return ++a;
} catch (Exception e) {
} finally {
System.out.println("你好");
return a++;
}
}
public static void main(String [] args){
System.out.println(test());
}
}
运行结果:
你好
1
假如finally中的代码在try中return执行前执行,那么输出结果应该是2对不对?但是这里答案却是1,因此就说明并不是在try中return执行前执行。应该是按照顺序执行,最后执行finally中的代码,那样结果才是2。可以将两个return中的代码交换,也就是这样:
public class returnTestInt {
public static int test(){
int a = 0;
try {
return a++;
} catch (Exception e) {
} finally {
System.out.println("你好");
return ++a;
}
}
public static void main(String [] args){
System.out.println(test());
}
}
运行结果:
你好
2
总结一下,不管你try中有没有return,finally中的代码一定会执行。当try中有return,但是finally中没有,则finally中的代码在try中return执行前执行;当两者中均有return,那么先执行finally中return之前的代码,然后执行try中return,最后执行finally中的return!!!