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