第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

急急急!為什么用HelloWorld.this.score是錯誤的?

我記得前面講的靜態(tài)方法中對靜態(tài)變量的使用有兩種方法:

第一種直接用(變量名);

第二種用(實例化一個對象;對象.變量名);

應(yīng)該是類似的吧,我這里不就相當(dāng)于第二種方法么?

正在回答

7 回答

只要類不是靜態(tài)的 就有對象,有對象就有this

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

wswzh0329 提問者

非常感謝!
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~

。。我現(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)該不需要外類的對象就能直接用???

大神幫幫忙,非常感謝!


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

天啟之魂

this的值到底是什么 你還是沒弄清楚,你可以理解為this實際上是方法(非靜態(tài))在進(jìn)棧后,方法里的一個局部,這個變量的值就是堆內(nèi)存中某個對象的首地址值,即調(diào)用這個函數(shù)的對象的首地址值,你調(diào)用this.a 即表示你調(diào)用的是this指向的堆內(nèi)存中的對象中的這個a 而方法內(nèi)部類定義在方法中,可以理解這個內(nèi)部類只是這個方法的一個局部變量,是沒辦法在外部直接獲取的,你需要在方法中建立一個內(nèi)部類的對象,這個對象在方法的內(nèi)部,所以你只能通過訪問這個方法來訪問這個內(nèi)部類的對象 如果這個方法時靜態(tài)方法,這個靜態(tài)方法在加載后還是會在堆內(nèi)存中產(chǎn)生一個新對象,而這個對象的首地址值,就是內(nèi)部類的this的值
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~
#2

wswzh0329 提問者 回復(fù) 天啟之魂

。。還是似懂非懂,堆內(nèi)存跟棧還不了解,等以后在來理解吧,先記住結(jié)果。非常感謝!
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~
#3

天啟之魂

得到你個最佳回答真心不容易,幾次被你繞進(jìn)去了,有機(jī)會先學(xué)下棧內(nèi)存和堆內(nèi)存在建立對象時的內(nèi)存體現(xiàn),不然很多東西弄不清楚,imooc最不好的就是沒有講這些很關(guān)鍵的知識點
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~
#4

wswzh0329 提問者 回復(fù) 天啟之魂

。。能被我繞進(jìn)去說明我扯的有道理啊,哈哈!再次感謝!
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

?或者你沒懂什么是靜態(tài)!你想自己想清楚為什么靜態(tài)不能使用this在來考慮別的問題

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

wswzh0329 提問者

。。我現(xiàn)在知道this使用的前提是要有當(dāng)前對象,然后也看了static的相關(guān)知識,靜態(tài)在對象之前就存在,加載了一次,放在內(nèi)存中;然后又產(chǎn)生了新的問題: 字?jǐn)?shù)太多了,放在下面,麻煩大神看一下??!
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~

只想說一句 ,你根本沒懂什么是this!就這!

0 回復(fù) 有任何疑惑可以回復(fù)我~

這是靜態(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();

}


0 回復(fù) 有任何疑惑可以回復(fù)我~

? 這是靜態(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);

}

}


0 回復(fù) 有任何疑惑可以回復(fù)我~

................調(diào)用靜態(tài)變量兩種 ?

一種是 ?類名.變量名?

一種是 ?對象名.變量名

你自己創(chuàng)造了第三種!不謝!


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

wswzh0329 提問者

。。在后面的嘗試中我發(fā)現(xiàn): 1.靜態(tài)方法中不能使用(this。變量名)來調(diào)用靜態(tài)變量,【Cannot use this in a static context】 那么,問題來了, 2.為什么在靜態(tài)方法內(nèi)部類中的方法中(普通方法)可以使用(Outer。this。變量名)來調(diào)用外部類的成員變量?--不是跟第一點沖突了?也是在靜態(tài)方法下???!難道是內(nèi)部類中的普通方法調(diào)用中調(diào)用而不是直接在外部類的靜態(tài)方法中直接調(diào)用的原因? 3.在靜態(tài)內(nèi)部類中,同樣是在普通方法下面,為什么使用Outer。this。變量名就報錯了? 大哥幫忙解答一下! 下面有代碼
2015-10-06 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學(xué)習(xí)       531214    人
  • 解答問題       6327    個

課程升級!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會Java面向?qū)ο缶幊痰膴W妙

進(jìn)入課程

急急急!為什么用HelloWorld.this.score是錯誤的?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號