急急急!為什么用HelloWorld.this.score是錯誤的?
我記得前面講的靜態(tài)方法中對靜態(tài)變量的使用有兩種方法:
第一種直接用(變量名);
第二種用(實例化一個對象;對象.變量名);
應(yīng)該是類似的吧,我這里不就相當(dāng)于第二種方法么?
我記得前面講的靜態(tài)方法中對靜態(tài)變量的使用有兩種方法:
第一種直接用(變量名);
第二種用(實例化一個對象;對象.變量名);
應(yīng)該是類似的吧,我這里不就相當(dāng)于第二種方法么?
2015-10-04
舉報
2015-10-06
只要類不是靜態(tài)的 就有對象,有對象就有this
2015-10-06
。。我現(xiàn)在知道this使用的前提是要有當(dāng)前對象,然后也看了static的相關(guān)知識,靜態(tài)在對象之前就存在,加載了一次,放在內(nèi)存中;然后又產(chǎn)生了新的問題:
要調(diào)用內(nèi)部類的普通方法,必須先創(chuàng)建內(nèi)部類的對象沒錯吧?!--所以內(nèi)部類中的成員是可以用this表示的?!
現(xiàn)在要用this調(diào)用外部類的成員,就要看外部類的對象是不是存在;針對這個問題,可以用創(chuàng)建內(nèi)部類對象需不需要外部類對象來判斷:
1.要是需要,說明有內(nèi)類對象就肯定存在外類對象,就可以用this引用;
2.要是不需要,說明即使有內(nèi)類對象也沒有外部對象,也就不能用this引用;--到目前的邏輯應(yīng)該沒錯吧?
接著就具體的判斷:
1.成員內(nèi)部類:明確的說了需要用外部類的對象來創(chuàng)建內(nèi)部類的對象,所以能用this;
2.靜態(tài)內(nèi)部類:也是明確的說了不需要外部類的對象來創(chuàng)建內(nèi)部類的對象,所以不能用this;
3.方法內(nèi)部類:可以分為普通方法內(nèi)部類跟靜態(tài)方法內(nèi)部類,普通方法內(nèi)部類沒什么問題,它屬于外類的對象,所以肯定是需要對象來調(diào)用的,所以可以用this;
問題來了,靜態(tài)方法內(nèi)部類需不需要用外部類的對象來創(chuàng)建內(nèi)部類的對象呢?根據(jù)它能用this來引用,說明是需要外類對象來創(chuàng)建的,可是這個方法不是屬于外類的嗎,應(yīng)該不需要外類的對象就能直接用???
大神幫幫忙,非常感謝!
2015-10-06
?或者你沒懂什么是靜態(tài)!你想自己想清楚為什么靜態(tài)不能使用this在來考慮別的問題
2015-10-06
只想說一句 ,你根本沒懂什么是this!就這!
2015-10-06
這是靜態(tài)方法中的內(nèi)部類中的使用:在內(nèi)部類的普通方法下面可以使用this;在靜態(tài)方法下面直接使用this就會報錯--對應(yīng)問題的第二點!(可以的話順便幫我解決一下注釋中帶問號的問題,謝謝?。?/p>
//靜態(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,如何取這個b的值??????????????????
class Inner{
public ?int c=8; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//只能是普通方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //(this.c)和(new Inner().c)來調(diào)用;要是沒有相同的,還能(c);
public ?void print(){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//只能是普通方法,靜態(tài)方法就會報錯!
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);
}
}
System.out.println(this.A); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//報錯了?!
Inner in=new Inner();
in.print();
}
2015-10-06
? 這是靜態(tài)內(nèi)部類中普通方法show()下面的調(diào)用出錯的情況
? ? // 創(chuàng)建靜態(tài)內(nèi)部類
public ?static ? ? ? ?class SInner {
? ? ? ? // 內(nèi)部類中的變量score
? ? ? ? int score = 91;
? ? ? ??
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.this.score ? ? ? ? ? );
? ? ? ? ? ? //這里為什么不能用HelloWorld.this.score
System.out.println("訪問內(nèi)部類中的score:" + score);
}
}
2015-10-04
................調(diào)用靜態(tài)變量兩種 ?
一種是 ?類名.變量名?
一種是 ?對象名.變量名
你自己創(chuàng)造了第三種!不謝!