我懷疑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. 任何人都可以告訴我這裏使用的模塊
- 2. 任何人都可以告訴我阿達的Real_Matrix的精度
- 3. 任何人都可以告訴我這是如何工作的?
- 4. 任何人都可以告訴我groovy的區別嗎?
- 5. 任何人都可以告訴我差價的RRECOMMENDS和RDEPENDS
- 6. 任何人都可以告訴技能名稱是什麼?
- 7. 任何人都可以告訴我,如何使用jQuery與Angular4?
- 8. 任何人都可以告訴我如何將java庫添加到monodroid中嗎?
- 9. 任何人都可以告訴我什麼:x:用於?
- 10. 任何人都可以告訴我Oracle Enterprise Repository是什麼?
- 11. 任何人都可以告訴我這是什麼功能嗎?
- 12. 任何人都可以告訴我哪裏出錯了嗎?
- 13. 任何人都可以告訴我這有什麼問題嗎?
- 14. 任何人都可以告訴我做錯了什麼?
- 15. 任何人都可以告訴我有關WebDriverBackedSelenium?
- 16. 任何人都可以告訴我這個小部件的名字是什麼?
- 17. 任何人都可以告訴我Java組合類的導入語句嗎?
- 18. 任何人都可以告訴我哪一塊CSS導致了缺口?
- 19. 任何人都可以告訴我關於Android中的InternalStorage嗎?我很困惑
- 20. 任何人都可以告訴我怎麼可以在文本區使用php
- 21. 任何人都可以告訴我我的錯在哪裏,這段代碼?
- 22. 任何人都可以告訴我如何在Rails3中做鏈接標記嗎?
- 23. 任何人都可以告訴我如何在asp.net中準備atendace表單嗎?
- 24. 任何人都可以告訴我我的功能有什麼問題嗎?
- 25. 任何人都可以告訴我這是什麼意思在PHP中?
- 26. 任何人都可以請告訴我如何使用異步任務
- 27. 任何人都可以告訴我,我在這個JQuery腳本錯了
- 28. 任何人都可以告訴我conduit.com是如何工作的嗎?
- 29. 任何人都可以告訴我如何從相機拍照並在android
- 30. 任何人都可以告訴我bonjour如何在IOS上工作
什麼是「全局變量」?你的意思是一個'靜態'變量?請張貼一個小代碼片段來演示一個例子。 – Bohemian 2013-02-18 15:32:00
不,這不是事實,你沒有理由懷疑。 – EJP 2013-02-18 23:06:16