方法內部類中有關變量的問題
1.首先在一個方法內部類中,定義常量變量輸出都是對的,但是如果在外部的方法中定義變量,然后在內部類中輸出為什么會報錯呢?
2.定義變量在外部類下和方法里會對方法內部類有什么不同影響嗎?
3.具體代碼如下
代碼一:public class HelloWorld {????????????????????????????
?public void show(){
?int a=1;??int b=2;
??class Inner{
???int c=3;
???public void print(){
????System.out.println("外部變量a"+a);
????System.out.println("內部變量"+c);
??}}
??????? Inner i=new Inner();
????i.print ();?}
???public static void main(String[] args) {
??HelloWorld m=new HelloWorld();
m.show();
?}}
?代碼二:public class HelloWorld {
?????? int a=1;int b=2;
??????? public void show(){
?class Inner{
???int c=3;
???public void print(){
????System.out.println("外部變量a"+a);
????System.out.println("內部變量"+c);
??}}
??????? Inner i=new Inner();
????i.print ();}
???public static void main(String[] args) {
??HelloWorld m=new HelloWorld();
m.show();}}
代碼一劃線處是錯的。代碼二則正確,并且代碼一將int a=1改成final int a=1就對了,是什么原因
2015-09-25
因為內部類可以直接訪問外部類的成員(變量和方法),所以代碼二沒問題
但是代碼一中a是一個局部變量,局部變量是儲存在棧內存中,當方法結束后(彈棧),這個變量就消失了(方法就消失了),所以內部了可能沒辦法讀取到這個變量.只有加了final將這個變?yōu)槌A?將這個a的值儲存到方法區(qū)的常量池里面后,才能被訪問到
順便說下 如果你完全是自己照著imooc里面的教程學的,你估計看不懂我說的,因為imooc到第二季還沒提到過內存方面的內容.(我也是不懂,自己找資料學的)