java:面向物件-區域性內部類訪問區域性變數的問題
阿新 • • 發佈:2018-12-12
* 區域性內部類訪問區域性變數必須用final修飾* 區域性內部類在訪問他所在方法中的區域性變數必須用final修飾,為什麼? 因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和方法的生命週期是一樣的,當方法彈棧,這個區域性變數也會消失,那麼如果區域性內部類物件還沒有馬上消失想用這個區域性變數,就沒有了,如果用final修飾會在類載入的時候進入常量池,即使方法彈棧,常量池的常量還在,也可以繼續使用
1.8之前的版本是需要加final,1.8之後不用加也可以使用。
public class Demo2_InnerClass { public static void main(String[]args){ Outher o=new Outher(); o.method(); } } class Outher{ public void method(){ int num=10; class Inner{ public void print(){ System.out.println("區域性內部類成員方法"); System.out.println("訪問區域性變數需要設定為final:"+num); } } Inner i=new Inner();//在方法中建立Inner物件 i.print(); } /* public void run(){//區域性內部類,只能在其所在的方法中訪問 Inner i=new Inner(); i.print(); }*/ }