我很熟悉所有的局部變量將被存儲在棧內存中,並且對象和靜態變量將被存儲在堆中。但是當我遇到以下使我困惑的代碼時。方法中的類如何訪問該方法的局部變量?
public class Outer {
private int a =10;
public void outerMethod() {
int x = 30;
class Inner {
private int b = 20;
public void innerMethod() {
System.out.println("The Value of a is: "+a);
System.out.println("The Value of b is: "+b);
System.out.println("The Value of x is: "+x);
}
};
Inner inner = new Inner();
inner.innerMethod();
}
}
上述代碼運行良好。但我這裏的問題是x是outerMethod()的局部變量。當我們創建一個Outer類的對象並調用outerMethod()時,x將被存儲在一個棧框架中,並且我還定義了一個Inner類的類定義並創建了它的對象, m調用它的innerMethod()。
這樣內部類的對象必須存儲在堆內部。如果是這樣的話,它怎麼可以訪問x ??
你爲什麼要這麼做?僅僅因爲它的合法性並不意味着它有用。 – QuakeCore
我只是想知道原因。不管它是否有用,都會在我身邊 –
@KishoreKumarKorada「無論它是否有用」,''Inner'類在關閉'x'的方式是一個非常有用的特性,稱爲'closure',它在事件處理中被頻繁使用 – Ramanlfc