当前位置: 首页 > 面试题库 >

终于怪异的举动?

百里君博
2023-03-14
问题内容
public class Test2 {

    public static void main(String[] args) {
        Test2 obj=new Test2();
        String a=obj.go();

        System.out.print(a);
    }


    public String go() {
        String q="hii";
        try {
            return q;
        }
        finally {
            q="hello";
            System.out.println("finally value of q is "+q);
        }
    }

为什么hii从函数返回后,此打印为什么go()值在finally块中更改为“ hello”?

程序的输出是

finally value of q is hello
hii

问题答案:

那是因为您返回的值是q在您更改qfinally块中的值之前进行评估的。您返回q,它评估了它的价值;然后您qfinally块中进行了更改,但这并不影响加载的值;然后使用评估值完成返回。

不要编写像这样的棘手代码。如果它使编写它的人感到困惑,请想象一下它将导致下一个人的问题,如果您不在别的地方,它将在几年之后。



 类似资料:
  • 如果有人理解java编译器为什么这么做,请解释一下。

  • 问题内容: 异常处理中的块究竟执行什么功能? 问题答案: 它包含应始终执行的代码,无论是否发生异常。 例如,如果您打开了一个文件,则应在块中将其关闭,以确保始终关闭该文件。如果在块中将其关闭,则较早的异常将导致执行直接跳到该块并跳过关闭文件。 有关更多详细信息,请参见Java教程。

  • 问题内容: 从Android 4.4 KitKat开始,我的应用程序崩溃了。似乎与微调器有关。我收到的错误的堆栈跟踪: 我在动作栏中有微调器导航,我认为这与它有关。我正在使用ABS.Spinner数组适配器的getView方法有跟踪错误。这是我的getView方法: 如果我对此行发表评论: 问题消失了。有人有什么主意吗? 问题答案: 正如Peterdk 在这里描述的那样。您不需要删除 androi

  • 问题内容: 基本上,该网站可以正常运行12多个小时,然后突然停止工作。我将开始在以前运行良好的LINQ查询中引发奇怪的异常。 我在这篇文章的底部提供了堆栈跟踪。 根据在类似SO帖子上找到的建议,我通过直接从Server Explorer中的DB拖动表来删除并重新制作了DBML。比较Git中的新旧内容,我发现了一些不同的字段: 在dbml中将varchar(255)的一个实例设置为nchar(10)

  • 我刚刚在iOS 7 target上运行了一个演示应用程序,这是我得到的: 我正在使用一个故事板,它在iOS8中看起来很好。约束是正确的。 我已经检查过,例如UITableView在iOS 7中以偏移量开始 但这种情况下的问题是整件事,包括状态栏有偏移量,不知道这是什么。我在故事板中摆弄视图控制器的布局设置,没有任何效果。 我还创建了一个全新的(单视图)项目,运行时没有任何更改,也遇到了同样的问题。