關于方法內部類的變量問題
在這種程序中有三層變量,分別是外部類中聲明的成員變量、外部類的方法中的局部變量、該方法中的方法內部類中聲明的該類的成員變量;
假設在該方法內部類中的方法對這三層變量都要調用:
1。要是這些變量都沒有重名的,如何調用?
2、要是這三層的變量中都有重名的,如何調用并區分開?
在這種程序中有三層變量,分別是外部類中聲明的成員變量、外部類的方法中的局部變量、該方法中的方法內部類中聲明的該類的成員變量;
假設在該方法內部類中的方法對這三層變量都要調用:
1。要是這些變量都沒有重名的,如何調用?
2、要是這三層的變量中都有重名的,如何調用并區分開?
2015-10-05
舉報
2015-10-06
根據之前看到的關于成員變量和局部變量的介紹中我還看到了這樣一句話“局部變量是在類的方法中定義,在方法中臨時保存數據”,也就是說這個方法中的變量是臨時性的,還有我看了其他人關于這方面的解答,他們是這樣說的“
方法中的變量是一個局部變量,局部變量是儲存在棧內存中,當方法結束后(彈棧),這個變量就消失了(方法就消失了),所以內部類可能沒辦法讀取到這個變量.順便說下 如果你完全是自己照著imooc里面的教程學的,你估計看不懂我說的,因為imooc到第二季還沒提到過內存方面的內容.(我也是不懂,自己找資料學的)”
我想他的意思也就是那個方法中的變量可能就是一個臨時變量,數據不能一直保存,所以方法內部類無法調用吧,我是這么理解的,希望能幫到你。
2015-10-06
。。這是我自己在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();
}*/
}
2015-10-06
恩恩,你說的對,我再去找書看看去,你要是找到了麻煩記得告訴我一下,謝了哈!
2015-10-06
我是根據你的問題自己敲代碼試的,所以可能有些不對的還請見諒。
1,如果三層變量都不相同,可以直接調用,如:a,b,c,則直接+a,+b,+c,即可。
2,如果三層變量都為a,在調用時如果只寫+a,則只會調用該方法的方法內部類中聲明的該類的成員變量,也就是最底下那層,如果想調用外部類中聲明的變量,則可以使用:(外部類名.this.變量名)這種形式即可,但是調用外部方法中的局部變量我也不知道了,希望有其他大神看到了能幫忙解決一下。