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

Java本地类中捕获的变量是什么

欧阳飞章
2023-03-14
问题内容

本地类的Java文档说:

此外,局部类可以访问局部变量。但是,局部类只能访问声明为final的局部变量。当局部类访问封闭块的局部变量或参数时,它将捕获该变量或参数。例如,PhoneNumber构造函数可以访问局部变量numberLength,因为它被声明为final。numberLength是捕获的变量。

捕获的变量是什么,其用途是什么,为什么需要它?请帮助我理解它的概念。


问题答案:

捕获的变量是什么,其用途是什么,为什么需要它?

捕获的变量是已复制的变量,因此可以在嵌套类中使用。必须复制它的原因是对象可能在当前上下文中失效。它必须是final(或final在Java
8中是有效的),因此不会混淆是否会看到对变量的更改(因为它们不会出现)

注意:Groovy确实有此规则,对局部变量的更改可能意味着对封闭类中的值的更改,如果涉及多个线程,则尤其令人困惑。

捕获变量的示例

public void writeToDataBase(final Object toWrite) {
    executor.submit(new Runnable() {
        public void run() {
             writeToDBNow(toWrite);
        }
    });
    // if toWrite were mutable and you changed it now, what would happen !?
}
// after the method returns toWrite no longer exists for the this thread...


 类似资料:
  • 本文向大家介绍C ++中的变量和变量类型是什么?,包括了C ++中的变量和变量类型是什么?的使用技巧和注意事项,需要的朋友参考一下 变量为我们提供了程序可以操纵的命名存储。C ++中的每个变量都有一个特定的类型,该类型确定变量的内存大小和布局。可以存储在该内存中的值的范围;以及可以应用于该变量的一组操作。一个非常简单的变量示例是- 在这里,我们有一个变量my_val,类型为int(integer)

  • 问题内容: 我正在阅读我的Deitel《 Java How to Program》一书,并遇到了“ 阴影 ”一词。如果允许阴影,那么Java类中有什么情况或目的? 例: 问题答案: 阴影的基本目的是使本地代码与周围的类分离。如果不可用,请考虑以下情况。 API中的Class Foo已发布。在代码中将其子类化,并在子类中使用名为bar的变量。然后,Foo发布更新,并在其类中添加一个称为Bar的受保护

  • 问题内容: 如果您查看字节码 Java 8更新121生成的字节码是 该方法被调用的,结果被忽略。 这是间接的空引用检查吗? 当然,如果您跑步 这将触发NullPointerException。 问题答案: 是的,调用已成为规范的“测试”成语,正如预期的那样,这是一种廉价的内在操作,而且我想,如果未使用。 另一个示例是使用不是的外部实例创建内部类实例: 编译为 另请参阅JDK-8073550: 我们

  • 我想从传递的几个值动态调用几个“setter”方法。每个方法都将具有字符串,int...要设置的变量类型(例如:setUserName(String userName)或setUserAge(int age))。 在我的例子中,我有一个setter方法“setUse_status(int use_stats)”,我无法配置getDeclaredMethod方法工作。似乎在获取方法时,classVa

  • 问题内容: Q1。 Java中的condVar是什么?如果我看到下面的代码,条件变量是否一定必须在“ mutex.acquire() ”和“ mutex.release() ”块内? 我有三个正在运行的线程 myThreadA , myThreadB 和 myThreadC ,它们调用相同的函数 commonActivity() 来触发函数 myWorkReport(), 例如 Q2。 使用tim

  • 问题内容: 我正在读一本书,遇到过Java中的“影子变量”一词,但没有描述。最终,这些变量是做什么用的,以及如何实现? 问题答案: 除了提供我自己的描述之外,我可能会要求您例如在以下位置阅读它:http : //en.wikipedia.org/wiki/Variable_shadowing。了解变量的阴影后,建议您继续阅读有关覆盖/阴影方法和可见性的一般知识,以全面了解此类术语。 实际上,由于该