關(guān)于方法內(nèi)部類的變量問題
在這種程序中有三層變量,分別是外部類中聲明的成員變量、外部類的方法中的局部變量、該方法中的方法內(nèi)部類中聲明的該類的成員變量;
假設(shè)在該方法內(nèi)部類中的方法對(duì)這三層變量都要調(diào)用:
1。要是這些變量都沒有重名的,如何調(diào)用?
2、要是這三層的變量中都有重名的,如何調(diào)用并區(qū)分開?
在這種程序中有三層變量,分別是外部類中聲明的成員變量、外部類的方法中的局部變量、該方法中的方法內(nèi)部類中聲明的該類的成員變量;
假設(shè)在該方法內(nèi)部類中的方法對(duì)這三層變量都要調(diào)用:
1。要是這些變量都沒有重名的,如何調(diào)用?
2、要是這三層的變量中都有重名的,如何調(diào)用并區(qū)分開?
2015-10-05
舉報(bào)
2015-10-06
根據(jù)之前看到的關(guān)于成員變量和局部變量的介紹中我還看到了這樣一句話“局部變量是在類的方法中定義,在方法中臨時(shí)保存數(shù)據(jù)”,也就是說這個(gè)方法中的變量是臨時(shí)性的,還有我看了其他人關(guān)于這方面的解答,他們是這樣說的“
方法中的變量是一個(gè)局部變量,局部變量是儲(chǔ)存在棧內(nèi)存中,當(dāng)方法結(jié)束后(彈棧),這個(gè)變量就消失了(方法就消失了),所以內(nèi)部類可能沒辦法讀取到這個(gè)變量.順便說下 如果你完全是自己照著imooc里面的教程學(xué)的,你估計(jì)看不懂我說的,因?yàn)閕mooc到第二季還沒提到過內(nèi)存方面的內(nèi)容.(我也是不懂,自己找資料學(xué)的)”
我想他的意思也就是那個(gè)方法中的變量可能就是一個(gè)臨時(shí)變量,數(shù)據(jù)不能一直保存,所以方法內(nèi)部類無法調(diào)用吧,我是這么理解的,希望能幫到你。
2015-10-06
。。這是我自己在eclipse上面嘗試的結(jié)果
package com.shiyan2;
import com.shiyan3.Test.Inner;
public class Shiyan {
/* //普通方法中的內(nèi)部類的調(diào)用
? ? static int a=2; ? ? //可以通過(Shiyan.this.a)和(Shiyan.a)和(new Shiyan().a)調(diào)用;要是沒有相同的還能用(a)來調(diào)用
? ?int b=7; ? ? //普通變量 ? ? 可以通過(Shiyan.this.b)和(new Shiyan().b)來調(diào)用;要是沒有相同的話可以用(b)來調(diào)用;
? ?
? ?public void print(){
?int b=2; ? ? ? ? ? ? ?//方法中的變量不能設(shè)為public
?//該如何調(diào)用??????????
?class Inner{
?public int ?c=4; //方法內(nèi)部類中的成員變量可以設(shè)置為public
? ? ?public int b=6; ?//(this.b)和(new Inner().b)來調(diào)用
?public void print(){
? int d=4;?
? int c=5;//為什么默認(rèn)的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();
??
? ?}*/
/*//靜態(tài)方法中的內(nèi)部類 ? ?注:內(nèi)部類中的方法只能是普通方法
public int a=1; ? ? ?//只能(new Shiyan().a)來調(diào)用
public static int A=3;//(Shiyan.A)和(new Shiyan().A)和(Shiyan.this.A) 要是沒有相同的還能用(A)
public static void print(){
int b=2; ? ? ?//位移的變量形式,要么設(shè)為final常量
//要是有相同的b,如何取這個(gè)b的值??????????????????
class Inner{
public ?int c=8; ? ?//只能是普通方法
? ? ? ? ? ? ? ? ? //(this.c)和(new Inner().c)來調(diào)用;要是沒有相同的,還能(c);
public ?void print(){ ? //只能是普通方法,靜態(tài)方法就會(huì)報(bào)錯(cuò)!
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();
}
*/
//測(cè)試類
/*
? ?public static void main(String[] args) {
Shiyan test=new Shiyan();
test.print();
}*/
}
2015-10-06
恩恩,你說的對(duì),我再去找書看看去,你要是找到了麻煩記得告訴我一下,謝了哈!
2015-10-06
我是根據(jù)你的問題自己敲代碼試的,所以可能有些不對(duì)的還請(qǐng)見諒。
1,如果三層變量都不相同,可以直接調(diào)用,如:a,b,c,則直接+a,+b,+c,即可。
2,如果三層變量都為a,在調(diào)用時(shí)如果只寫+a,則只會(huì)調(diào)用該方法的方法內(nèi)部類中聲明的該類的成員變量,也就是最底下那層,如果想調(diào)用外部類中聲明的變量,則可以使用:(外部類名.this.變量名)這種形式即可,但是調(diào)用外部方法中的局部變量我也不知道了,希望有其他大神看到了能幫忙解決一下。