java7局部內部類訪問外部變量final,java8不需要將變量設置爲final?

爲什麼局部內部類只能訪問外部的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();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章