/*
具備內(nèi)部類(lèi): 在一個(gè)類(lèi)的成員方法內(nèi)部定義另外一個(gè)類(lèi),那么另外一個(gè)類(lèi)就稱(chēng)做局部?jī)?nèi)部類(lèi)
局部?jī)?nèi)部類(lèi)的使用規(guī)則:
1. 如果局部?jī)?nèi)部類(lèi)訪問(wèn)了一個(gè)局部變量,該局部變量必須用final來(lái)修飾;
原因:當(dāng)test方法執(zhí)行完畢后,那么y馬上從內(nèi)存中消失甸昏,而Inner對(duì)象在方法執(zhí)行完畢的時(shí)候還沒(méi)有從內(nèi)存中消失,而
inner對(duì)象的print方法還在訪問(wèn)者y變量,這時(shí)候的y變量已經(jīng)消失了育八,因此出現(xiàn)了訪問(wèn)故障,為了解決這個(gè)問(wèn)題赦邻,就得
延長(zhǎng)y的生命周期.
解決方案: 如果一個(gè)局部?jī)?nèi)部類(lèi)訪問(wèn)一個(gè)局部變量的時(shí)候髓棋,那么久讓該局部變量?jī)?nèi)部類(lèi)訪問(wèn)這個(gè)局部變量的復(fù)制品,并且
該變量的指向不能改變,因此就要用final來(lái)修飾; 也就是說(shuō)讓復(fù)制品和原來(lái)的變量時(shí)一樣的按声。
*/
class Outer
{
public void test()
{
final int y = 100;
class Inner
{
int x = 10;
public Inner(int x)
{
this.x = x;
}
public void print()
{
System.out.println(x);
System.out.println(y);
}
}
Inner i = new Inner(100);
i.print();
}
}
class Demo4
{
public static void main(String[] args)
{
Outer o1 = new Outer();
o1.test();
}
}