爲什麼局部內部類只能訪問外部的final變量?
這裏沒有寫版本號,嚴謹!!哈哈哈哈哈
生命週期不同,當方法執行結束時,局部內部類如果依舊被引用,那麼內部類不會死亡,也就意味着局部內部類訪問的是一個不存在的變量,顯然不合適。而事實上局部內部類不會產生訪問以上問題,因爲java編譯時將局部內部類訪問的變量已經拷貝了一份放進了局部內部類。爲什麼是final?如果局部變量爲基本類型,那麼值不能被改變,否則導致和局部變量不一致。如果局部變量爲對象,只要保證對象是同一個對象(地址相同),值可以改變。因此用final。
爲什麼java8不需要設置爲final?
只是不需要程序員顯式設置而已,事實上只要局部內部類訪問,java編譯時已經將局部變量設置爲final。我在java9中嘗試更改局部變量的值會產生報錯。
void NonFinal(){
int count=5;
count =6; //這裏修改會報錯
class nonF{
public void print(){
count =7;
System.out.println("局部內部類訪問非顯式設置的final變量:"+count);//因爲修改爲7,這裏也會報錯
}
}
nonF n = new nonF();
n.print();
}