資源描述:
《成員變量、實(shí)例變量、類(lèi)變量、成員方法、實(shí)例方法、類(lèi)方法的區(qū)別》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、成員變量、實(shí)例變量、類(lèi)變量、成員方法、實(shí)例方法、類(lèi)方法的區(qū)別2010-04-1115:18簡(jiǎn)單來(lái)說(shuō):類(lèi)體的定義包括成員變量的定義和方法的定義。1、成員變量包括實(shí)例變量和類(lèi)變量;而成員方法包括實(shí)例方法、類(lèi)方法,當(dāng)然還有一種特殊的構(gòu)造方法。2、類(lèi)變量、類(lèi)方法就是類(lèi)中的變量、方法,必須是靜態(tài)的,要加static;故其又稱(chēng)靜態(tài)變量、靜態(tài)方法。3、成員變量、成員方法是對(duì)象或?qū)嵗械淖兞?、方法,不加static;類(lèi)變量:靜態(tài)域,靜態(tài)字段,或叫靜態(tài)變量,它屬于該類(lèi)所有實(shí)例共有的屬性,在內(nèi)存中只有一個(gè)地方存儲(chǔ)這個(gè)變量。而且所有的實(shí)例都可以修改這個(gè)類(lèi)變量的值(前提是這個(gè)類(lèi)變量沒(méi)有被final修
2、飾,否則是常量了),而且訪問(wèn)類(lèi)變量的時(shí)候不用實(shí)例,直接用類(lèi)就可以了。類(lèi)方法:和類(lèi)變量一樣,可以不用實(shí)例,直接用類(lèi)就可以調(diào)用類(lèi)方法。實(shí)例變量:實(shí)例域,實(shí)例字段,或叫成員變量。實(shí)例方法:或叫成員方法,必須先有實(shí)例,然后才能通過(guò)實(shí)例調(diào)用該實(shí)例方法。使用方法:類(lèi)方法可以直接調(diào)用類(lèi)變量和類(lèi)方法??????????????類(lèi)方法不可以直接調(diào)用實(shí)例變量和實(shí)例方法???????????????類(lèi)方法中沒(méi)有this,因?yàn)闆](méi)有實(shí)例,this不知道調(diào)用哪個(gè)實(shí)例??????????????類(lèi)方法可以從類(lèi)里面直接訪問(wèn)類(lèi)成員??????????????實(shí)例方法可以調(diào)用類(lèi)方法,訪問(wèn)類(lèi)變量,但是不提倡這樣做
3、,會(huì)把類(lèi)方法和類(lèi)變量混淆成實(shí)例方法和實(shí)例變量程序?qū)嵗篶lassAnIntegerNamedX{???intx;??????//這個(gè)是成員變量?????publicintx(){????//成員方法???????????returnx;??}???publicvoidsetX(intnewX){???????//成員方法???????????x=newX;???}}publicclassPractice{??publicstaticvoidmain(Stringargs[]){?????????AnIntegerNamedXmyX=newAnIntegerNamedX();?
4、????????AnIntegerNamedXanotherX=newAnIntegerNamedX();??????????myX.setX(1);???????????anotherX.x=2;?????????System.out.println("myX.x="+myX.x());????????System.out.println("anotherX.x="+anotherX.x());??}}2:classAnIntegerNamedX{??staticintx;???????????//這里寫(xiě)成static,結(jié)果就變成全是2了,因?yàn)轭?lèi)變量是被實(shí)例所共享的,包括m
5、yX和anotherX?????????????????????????????????調(diào)用anotherX時(shí)所有的所有實(shí)例都改變了。publicintx(){????????returnx;}publicvoidsetX(intnewX){??????x=newX;}}publicclassPractice{????publicstaticvoidmain(Stringargs[]){??????????AnIntegerNamedXmyX=newAnIntegerNamedX();???????????AnIntegerNamedXanotherX=newAnIntege
6、rNamedX();???????????myX.setX(1);????????????anotherX.x=2;?????????//這里把X的值改成2,所有實(shí)例的X都是2了,因?yàn)轭?lèi)變量是被所有實(shí)例共享的,任何實(shí)?????????????????????????????????????????????例都可以對(duì)類(lèi)變量做最終的修改????????????System.out.println("myX.x="+myX.x());????????????System.out.println("anotherX.x="+anotherX.x());?????}}???????3:
7、同樣的,當(dāng)把那兩個(gè)方法都加上static變成類(lèi)方法的時(shí)候,會(huì)提示錯(cuò)誤讓你把X變成靜態(tài),是應(yīng)為類(lèi)方法不能直接訪問(wèn)實(shí)例變量!