面试题答案
一键面试在Java程序中,当try块中有return语句时,finally块会在return语句执行之前执行,但return语句的返回值会在finally块执行完毕后才真正返回。
以下是代码示例:
public class FinallyWithReturnExample {
public static int test() {
try {
return 1;
} finally {
System.out.println("finally block executed");
}
}
public static void main(String[] args) {
int result = test();
System.out.println("Return value: " + result);
}
}
在上述代码中,test
方法的try
块中有一个return 1
语句。当执行到return 1
时,并不会立即返回,而是先执行finally
块中的代码,打印出"finally block executed",然后try
块中的return 1
才真正返回值1,最后在main
方法中打印出返回值。
下面看一下finally
块执行前后对return
值影响的特殊情况:
public class FinallyModifyReturnExample {
public static int test() {
int num = 1;
try {
return num;
} finally {
num = 2;
System.out.println("finally block modified num to: " + num);
}
}
public static void main(String[] args) {
int result = test();
System.out.println("Return value: " + result);
}
}
在这个例子中,try
块中return num
语句会先将num
的值1保存起来,虽然在finally
块中修改了num
的值为2,但return
语句返回的仍然是保存的1,所以最终打印的返回值是1。
再看一种情况:
public class FinallyReturnOverrideExample {
public static int test() {
try {
return 1;
} finally {
return 2;
}
}
public static void main(String[] args) {
int result = test();
System.out.println("Return value: " + result);
}
}
在此例中,finally
块中也有return
语句,这种情况下finally
块中的return
会覆盖try
块中的return
,最终返回值为2。
总结来说,finally
块会在try
块中的return
语句执行之前执行,但如果finally
块中没有return
语句,try
块中的return
会在finally
块执行完毕后返回保存的值;如果finally
块中有return
语句,则会覆盖try
块中的return
语句返回的值。