- public class Test {
- /**
- * 写一个类证明return是在finally执行后才返回的,且在finally无法改变返回值。
- *
- * 思路:
- * 1 targ初始化为0,在finally中给targ赋值,并在try语句中返回targ
- * 2 如果得到的targ结果为0,则证明finally未改变返回值。
- * 3如果finally中输出语句在main函数得到结果之前输出,证明return在finally执行之后才返回的
- *
- * 输出结果证明,
- * finally的语句先执行,然后函数才会返回并且finally能改变targ的值,却改变不了返回的targ值
- * 由此想到的,可能是程序运行到return语句时,检查到还有finally语句要执行,因此先把return需要返回的结果保存,
- * 再让finally语句执行,finally执行结束后,直接把return语句直接把之前保存的结果输出,
- * 这样finally是在返回之前改变了targ的值,但是无法改变return的返回值
- *
- *
- *
- */
- public static void main(String[] args) {
-
- //打印返回结果
- System.out.println("返回的结果是:" + returnTest());
- }
- public static int returnTest() {
- System.out.println("将一个变量赋值为0");
- int targ = 0;
- try {
- System.out.println("Try语句被执行.....");
- // 返回targ值(结果为0)
- return targ;
- } finally {
-
- // 打印,证明此函数被执行,并能从打印顺序证明代码执行顺序
- System.out.println("finally语句执行.....");
- // 尝试给targ赋值
- targ = 1;
- // 打印改变后的targ结果(结果为1)
- System.out.println("finally中的targ =" + targ);
- }
- }
- }
复制代码 |