亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于方法內部類的變量問題

在這種程序中有三層變量,分別是外部類中聲明的成員變量、外部類的方法中的局部變量、該方法中的方法內部類中聲明的該類的成員變量;

假設在該方法內部類中的方法對這三層變量都要調用:

1。要是這些變量都沒有重名的,如何調用?

2、要是這三層的變量中都有重名的,如何調用并區分開?


正在回答

4 回答

根據之前看到的關于成員變量和局部變量的介紹中我還看到了這樣一句話“局部變量是在類的方法中定義,在方法中臨時保存數據”,也就是說這個方法中的變量是臨時性的,還有我看了其他人關于這方面的解答,他們是這樣說的“

方法中的變量是一個局部變量,局部變量是儲存在棧內存中,當方法結束后(彈棧),這個變量就消失了(方法就消失了),所以內部類可能沒辦法讀取到這個變量.順便說下 如果你完全是自己照著imooc里面的教程學的,你估計看不懂我說的,因為imooc到第二季還沒提到過內存方面的內容.(我也是不懂,自己找資料學的)

我想他的意思也就是那個方法中的變量可能就是一個臨時變量,數據不能一直保存,所以方法內部類無法調用吧,我是這么理解的,希望能幫到你。

0 回復 有任何疑惑可以回復我~
#1

wswzh0329 提問者

。。局部變量是臨時性的沒錯,但是類在方法中,調用那個局部變量的時候也是屬于在方法的執行中吧,方法沒有結束,這個局部變量還是應該存在的?
2015-10-06 回復 有任何疑惑可以回復我~
#2

wswzh0329 提問者

。。還有 如果其他三層的變量中沒有相同的變量名,在內部類方法中直接用(變量名)就能調用那個局部變量了不是嗎?說明應該是能夠被內部類調用的!
2015-10-06 回復 有任何疑惑可以回復我~
#3

wswzh0329 提問者

非常感謝!
2015-10-18 回復 有任何疑惑可以回復我~
#4

wswzh0329 提問者

。。不知道你搞懂沒,現在回來看發現能夠理解回答你的那個人說的了,方法中的局部變量在這個方法執行完畢之后就消失了,但是內部類或者說內部類的對象仍然存在,只要還有引用指向這個內部類對象,那么該對象就不會被釋放,而此時要用到的局部變量已經不存在了,所以就會出錯!只有final的局部變量的作用域跟該類的作用域一樣!
2015-10-18 回復 有任何疑惑可以回復我~
查看1條回復

。。這是我自己在eclipse上面嘗試的結果

package com.shiyan2;


import com.shiyan3.Test.Inner;


public class Shiyan {


/* //普通方法中的內部類的調用

? ? static int a=2; ? ? //可以通過(Shiyan.this.a)和(Shiyan.a)和(new Shiyan().a)調用;要是沒有相同的還能用(a)來調用

? ?int b=7; ? ? //普通變量 ? ? 可以通過(Shiyan.this.b)和(new Shiyan().b)來調用;要是沒有相同的話可以用(b)來調用;

? ?

? ?public void print(){

?int b=2; ? ? ? ? ? ? ?//方法中的變量不能設為public

?//該如何調用??????????

?class Inner{

?public int ?c=4; //方法內部類中的成員變量可以設置為public

? ? ?public int b=6; ?//(this.b)和(new Inner().b)來調用

?public void print(){

? int d=4;?

? int c=5;//為什么默認的friendly可以,更加私有的private不可以,只能用final????????

?System.out.println(new Shiyan().a);

?System.out.println(Shiyan.this.b);

?System.out.println(this.c);

?System.out.println(d);

?}

?

?}

Inner in=new Inner();

in.print();

??

? ?}*/


/*//靜態方法中的內部類 ? ?注:內部類中的方法只能是普通方法

public int a=1; ? ? ?//只能(new Shiyan().a)來調用

public static int A=3;//(Shiyan.A)和(new Shiyan().A)和(Shiyan.this.A) 要是沒有相同的還能用(A)

public static void print(){

int b=2; ? ? ?//位移的變量形式,要么設為final常量

//要是有相同的b,如何取這個b的值??????????????????

class Inner{

public ?int c=8; ? ?//只能是普通方法

? ? ? ? ? ? ? ? ? //(this.c)和(new Inner().c)來調用;要是沒有相同的,還能(c);

public ?void print(){ ? //只能是普通方法,靜態方法就會報錯!

int d=4; ? //唯一的變量形式,理由跟上面的b相同

int c=4;

System.out.println(Shiyan.this.A); ?//為什么可以用?

System.out.println(b);

System.out.println(this.c);

System.out.println(d);

}

}

Inner in=new Inner();

in.print();

}

*/

//測試類

/*

? ?public static void main(String[] args) {

Shiyan test=new Shiyan();

test.print();

}*/

}


0 回復 有任何疑惑可以回復我~

恩恩,你說的對,我再去找書看看去,你要是找到了麻煩記得告訴我一下,謝了哈!

0 回復 有任何疑惑可以回復我~
#1

wswzh0329 提問者

。。你有找到答案嗎
2015-10-06 回復 有任何疑惑可以回復我~

我是根據你的問題自己敲代碼試的,所以可能有些不對的還請見諒。

1,如果三層變量都不相同,可以直接調用,如:a,b,c,則直接+a,+b,+c,即可。

2,如果三層變量都為a,在調用時如果只寫+a,則只會調用該方法的方法內部類中聲明的該類的成員變量,也就是最底下那層,如果想調用外部類中聲明的變量,則可以使用:(外部類名.this.變量名)這種形式即可,但是調用外部方法中的局部變量我也不知道了,希望有其他大神看到了能幫忙解決一下。

0 回復 有任何疑惑可以回復我~
#1

wswzh0329 提問者

。。非常感謝你的解答! 其實今天回頭一想發現有四層變量,外部類的成員變量、方法中的局部變量、該方法中的內部類的成員變量、內部類的方法中的局部變量, 不過類內的變量調用應該跟前面學到的一樣調用,就是在類內部成員變量跟局部變量的調用; 然后外部類的成員變量應該(是new Outer().變量名)和(外部類名.this.變量名)都可以; 剩下的外部類方法中的局部變量還是調用不出來。。。
2015-10-06 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于方法內部類的變量問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號