1. 程式人生 > >java:面向物件-區域性內部類訪問區域性變數的問題

java:面向物件-區域性內部類訪問區域性變數的問題

* 區域性內部類訪問區域性變數必須用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();
    }*/
}