我怀疑JVM维护一个匿名块的所有外部类全局变量的单独副本。是这样吗? 感谢您的帮助。任何人都可以告诉我在Java中的匿名块的范围?
0
A
回答
1
你是指一个匿名类吗?
如果在非静态上下文中创建匿名类的实例,则它将包含对创建它的外部类的实例的隐式引用。匿名实例将有权访问外部类的私有字段和方法。虽然名字冲突将被解决,而赞成匿名课程。
要访问的属性和方法,其中有一个名称冲突使用以下语法:
OuterClass.this.methodCall();
例子:
public class Outer {
public static void main(String[] args) {
Outer o1 = new Outer(1);
Outer o2 = new Outer(2);
o1.doSomething();
o2.doSomething();
}
private int i;
private int j = 10;
public Outer(int i) {
this.i = i;
}
public void doSomething() {
new Runnable() {
private int i = 0;
public void run() {
System.out.println("Inner i = " + i);
System.out.println("Outer i = " + Outer.this.i);
System.out.println("Outer j = " + j);
}
}.run();
}
}
0
如果匿名内部类是可变的,您可以修改匿名内部类之外的对象。但是,您不能重新分配它们,因为它们必须声明为最终。
0
我解释你的问题是问:“当一个匿名块更改声明在块之外的变量时,变量是否会在块结束后保留这些更改?
我创建一个小的测试程序来演示的结果:
public class AnonymousTest {
private static int i = 0;
public static void main(String[] args) {
int j = 0;
System.out.println("Before anonymous block: i=" + i + " j=" + j);
//begin anonymous block
{
i = 5; j = 5;
System.out.println("Inside anonymous block: i=" + i + " j=" + j);
}
//end anonymous block
System.out.println("After anonymous block: i=" + i + " j=" + j);
}
}
的输出是:
Before anonymous block: i=0 j=0
Inside anonymous block: i=5 j=5
After anonymous block: i=5 j=5
正如你可以看到,一个匿名块的内部修改的任何变量保持改性,所以JVM不会为匿名块创建变量的副本。但是,匿名块内声明的变量只属于该块,并在块的末尾被销毁。
相关问题
- 1. 任何人都可以告诉我groovy的区别吗?
- 2. 任何人都可以告诉技能名称是什么?
- 3. 任何人都可以告诉我,如何使用jQuery与Angular4?
- 4. 任何人都可以告诉我有关WebDriverBackedSelenium?
- 5. 任何人都可以告诉我Oracle Enterprise Repository是什么?
- 6. 任何人都可以告诉我什么:x:用于?
- 7. 任何人都可以告诉我这有什么问题吗?
- 8. 任何人都可以告诉我做错了什么?
- 9. 任何人都可以告诉我这是什么功能吗?
- 10. 任何人都可以告诉我Java组合类的导入语句吗?
- 11. 任何人都可以告诉我我的错在哪里,这段代码?
- 12. 任何人都可以告诉我如何在Rails3中做链接标记吗?
- 13. 任何人都可以告诉我我的功能有什么问题吗?
- 14. 任何人都可以告诉我这是什么意思在PHP中?
- 15. 任何人都可以告诉我,我在这个JQuery脚本错了
- 16. 任何人都可以告诉我conduit.com是如何工作的吗?
- 17. 任何人都可以告诉这个cronjob做什么?
- 18. 任何人都可以告诉这个logcat说什么?
- 19. 任何人都可以描述范围的流程流程吗?
- 20. 任何人都可以告诉我在哪里可以找到在线Java实验室?
- 21. 任何人都可以告诉我有关Gensim使用的模型(skipgram/CBOW)吗?
- 22. 任何人都可以告诉我具有digestor-rules.xml的最新用法
- 23. 任何人都可以告诉我有关图的反向链接列表吗?
- 24. 任何人都可以告诉我为iPhone安装CorePlot框架的步骤吗?
- 25. 任何人都可以告诉我什么是python pyodbc connection.commit()的点?
- 26. 任何人都可以告诉我相当于黑莓的j2se类吗?
- 27. 任何人都可以告诉我错误在哪里int这片c#代码?
- 28. 任何人都可以告诉我什么考卷是在这里要求吗?
- 29. 任何人都可以告诉我为什么我得到java.lang.ArrayIndexOutOfBoundsException:1?
- 30. 任何人都可以告诉我我做错了什么吗? - 堆栈
什么是“全局变量”?你的意思是一个'静态'变量?请张贴一个小代码片段来演示一个例子。 – Bohemian 2013-02-18 15:32:00
不,这不是事实,你没有理由怀疑。 – EJP 2013-02-18 23:06:16