《疯狂JAVA讲义》3
目錄
對(duì)象的this使用
1.?this關(guān)鍵字總是指向調(diào)用該方法的對(duì)象。
做法一:使用this
做法二:不使用this
2. 特殊的:
方法詳解
成員變量和局部變量
隱藏和封裝
對(duì)象的this使用
1.?this關(guān)鍵字總是指向調(diào)用該方法的對(duì)象。
根據(jù)this出現(xiàn)位置不同,this作為對(duì)象的默認(rèn)引用有兩種情形:
(1)構(gòu)造器中引用該構(gòu)造器正在初始化的對(duì)象;
(2)在方法中調(diào)用該方法的對(duì)象。
事實(shí)上,this最大的作用就是讓類中的一個(gè)方法,訪問(wèn)同一個(gè)類中的另一個(gè)方法或者實(shí)例變量。
舉個(gè)栗子:定義一個(gè)Dog類,里面有run和jump兩個(gè)方法,想在jump中調(diào)用run方法。
做法一:使用this
結(jié)果如下:
做法二:不使用this
?
結(jié)果相同。
二者的比較:不使用this時(shí),需要在jump方法中重新定義一個(gè)對(duì)象,否則不能引用run方法,相比較而言,使用this更簡(jiǎn)練。
????如果自己調(diào)試程序,發(fā)現(xiàn)不用this也可以得到相同的結(jié)果,但是這是一種假象,實(shí)際上還是存在著this。
2. 特殊的:
????對(duì)于static修飾的方法而言,是不可以用this的,之前說(shuō)過(guò),static聲明的是類方法和類變量,不能調(diào)用沒(méi)有用static修飾的方法或者變量,必須創(chuàng)建一個(gè)實(shí)例。如果可以用this,就意味著類里的所有方法和變量都可以通過(guò)this調(diào)用,顯然很矛盾。因此,java規(guī)定,靜態(tài)成員不能訪問(wèn)非靜態(tài)成員。
下面舉個(gè)栗子告訴大家靜態(tài)方法引用非靜態(tài)方法時(shí)發(fā)生的錯(cuò)誤:
看一下原因:
這就很明顯了。
個(gè)人覺(jué)得this理解到這里已經(jīng)可以了。
方法詳解
1.?java里的方法不能單獨(dú)存在,所有的方法都必須定義在類里。方法在邏輯上要么屬于類,要么屬于對(duì)象。因此,方法也不能像函數(shù)那樣獨(dú)立執(zhí)行,必須使用類或者方法作為調(diào)用者。同一個(gè)類里方法互相調(diào)用給人一種方法可以獨(dú)立執(zhí)行的假象,上面也說(shuō)了,是通過(guò)this進(jìn)行調(diào)用的。
2. 方法的參數(shù)傳遞機(jī)制:值傳遞
????所謂的值傳遞,就是把參數(shù)的副本(復(fù)制品)傳給方法內(nèi),參數(shù)本身不會(huì)受到影響。
下面通過(guò)對(duì)兩個(gè)數(shù)進(jìn)行交換來(lái)說(shuō)明值傳遞:
結(jié)果為:
可以看到,沒(méi)有我們預(yù)期的效果。因?yàn)橄到y(tǒng)開(kāi)始執(zhí)行方法時(shí),是將實(shí)參變量賦值給形參變量,而并不是直接對(duì)實(shí)參進(jìn)行操作,所以當(dāng)然不會(huì)變啦。這就是值傳遞。這里我們需要用引用類型的參數(shù)傳遞。
正確的做法如下:
結(jié)果如下:
3. 方法重載
????同一個(gè)類里定義多個(gè)同名的方法,但是形參列表不同。
????java程序中確定一個(gè)方法有三個(gè)要素:
????(1)調(diào)用者
????(2)方法名
????(3)形參列表
????方法重載只需要形參列表不同,方法名相同即可,至于其他部分,比如方法的修飾符,返回值類型等等都與方法重載沒(méi)有關(guān)系。
舉個(gè)栗子:
結(jié)果如下:
成員變量和局部變量
? ?(1) 可以看出來(lái),成員變量是在類里定義的變量,局部變量是在方法中定義的變量。類變量是直到這個(gè)類被銷毀,否則一直存在,但是局部變量是隨著方法的消失而消失。
????(2)類變量可以通過(guò)類或者實(shí)例進(jìn)行訪問(wèn)及修改。因此,在實(shí)例中用到類變量時(shí)注意,一旦修改,別的實(shí)例用的就是修改后的值,慎重。
????(3)與成員變量不同的是,局部變量除了形參之外,都必須顯示初始化。也就是說(shuō),如果沒(méi)有賦初始值,不可以訪問(wèn)它們。
舉個(gè)栗子:
報(bào)錯(cuò)如下:
隱藏和封裝
主要通過(guò)四個(gè)訪問(wèn)控制符進(jìn)行控制:
(1)private(當(dāng)前類訪問(wèn)權(quán)限)
(2)default(包訪問(wèn)權(quán)限)
(3)protected(子類訪問(wèn)權(quán)限)
(4)public(公共訪問(wèn)權(quán)限)
介紹一下private:
????類里的大部分成員變量都應(yīng)該使用private修飾,只有一些用static修飾的,類似全局變量的成員變量,才考慮用public修飾。這是為了使模塊高內(nèi)聚(盡可能把模塊內(nèi)部數(shù)據(jù)在模塊內(nèi)獨(dú)立完成,不允許外部直接干預(yù)),低耦合(僅暴露少量的方法等給外部使用)。
介紹一下default:
????如果類里的一個(gè)成員或者一個(gè)外部類不使用任何訪問(wèn)控制符修飾,就是包訪問(wèn)權(quán)限的。default訪問(wèn)控制的成員或外部類可以被相同包下的其他類訪問(wèn)。
介紹一下protected:
????通常情況下,使用protected修飾一個(gè)方法,通常是希望其他子類重寫這個(gè)方法。
注意:
????如果一個(gè)java文件定義的所有類都沒(méi)有用public來(lái)修飾,則這個(gè)java源文件的文件名可以是一切合法名,但是如果一個(gè)java文件里定義了一個(gè)public修飾的類,則這個(gè)源文件的文件名必須與public修飾的類的類名相同。
/********************************/
最后說(shuō)一個(gè)容易忽視的問(wèn)題:
import 語(yǔ)句放在package語(yǔ)句之后,類定義之前。
?
END
????今天比較開(kāi)心的是用的是eclipse,我一定要學(xué)會(huì)熟練使用它,flag不能倒!在認(rèn)真的重新過(guò)知識(shí)點(diǎn)的過(guò)程中收獲不少,希望就這么慢慢的進(jìn)步,不要心急,給自己點(diǎn)信心!這兩天弄一個(gè)代碼題弄得自己頭都大了,昨天晚上還夢(mèng)到它呢,唉,決定先放一陣子,換換腦子重新再來(lái)。
????上午就這樣子交代了,下午打算上完課以后弄弄安卓,競(jìng)賽什么的,還是要好好學(xué)習(xí),差距太大。昨天早上的實(shí)驗(yàn)讓我很是崩潰,感覺(jué)自己好沒(méi)用的樣子,動(dòng)手能力果然太差,加油吧,別無(wú)他法!
????北京雨天,注意安全~
總結(jié)
以上是生活随笔為你收集整理的《疯狂JAVA讲义》3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《疯狂Java讲义》2
- 下一篇: 《疯狂Java讲义》4