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