聽起來蠻有意思的,繼續(xù)看看吧~
類與對象
這部分已經(jīng)學(xué)完了入門課程,聽翁凱老師的課程總有一種很安心的感覺。雖然學(xué)的不是很好,期末考試的編程題并沒有在規(guī)定時間內(nèi)搞定,之后的也有一些問題,但還是想繼續(xù)聽下去,繼續(xù)學(xué)習(xí)。
類定義了對象;對象是類的實(shí)體。
今天老師又用了自動售賣機(jī)當(dāng)例子講解面向?qū)ο蟮木幊趟枷牒徒忉屓绾味x類,成員對象和成員函數(shù),以及對象的初始化。
對象=屬性(數(shù)據(jù))+服務(wù)(操作,函數(shù))
封裝是指將數(shù)據(jù)和對數(shù)據(jù)的操作放在一起。
面向?qū)ο蟮木幊趟枷胫饕紤]兩個事情,第一,有什么東西?第二,能做什么事情?
對于自動售賣機(jī)來說,大概可以說一下的幾個。
price;
balace;
amont;
getmoney();
showtips();
showbalace();
chuhuo();
this是成員函數(shù)的一種特殊固有本地變量。
public class Circle extends Shape {
private int x;
private int y;
private int radius;
public Circle(int x, int y, int radius)
{
this.x = x;
this.y = y;
this.radius = radius;
}
構(gòu)造函數(shù):在構(gòu)造的時候會被自動的調(diào)用,不能有返回類型。構(gòu)造函數(shù)與類的名稱一致;
對象交互
好溜,好神奇。 原來這樣就是面向?qū)ο蟮乃伎挤绞絶
封裝
封裝,就是把數(shù)據(jù)和對這些數(shù)據(jù)的操作放在一起,并且用這些操作把數(shù)據(jù)掩蓋起來,是面向?qū)ο蟮幕靖拍钪?,也是最核心的概念?/p>
我們有一個非常直截了當(dāng)?shù)氖侄蝸肀WC在類的設(shè)計的時候做到封裝:
- 所有的成員變量必須是private的,這樣就避免別人任意使用你的內(nèi)部數(shù)據(jù);
- 所有public的函數(shù),只是用來實(shí)現(xiàn)這個類的對象或類自己要提供的服務(wù)的,而不是用來直接訪問數(shù)據(jù)的。除非對數(shù)據(jù)的訪問就是這個類及對象的服務(wù)。簡單地說,給每個成員變量提供一對用于讀寫的get/set函數(shù)也是不合適的設(shè)計。
private 針對類,同一個類的所有對象互相可以訪問private的成員變量以及成員函數(shù)。
包
當(dāng)你的程序越來越大的時候,你就會需要有一個機(jī)制幫助你管理一個工程中眾多的類了。包就是Java的類庫管理機(jī)制,它借助文件系統(tǒng)的目錄來管理類庫,一個包就是一個目錄,一個包內(nèi)的所有的類必須放在一個目錄下,那個目錄的名字必須是包的名字。
作為初學(xué)者,你可以忽略不看包,反正一切靠Eclipse。但是作為一個Java程序員,你不能不懂包。要不然,在使用別人的類庫和部署你的程序的時候,會遇到不少莫名其妙的麻煩。
對象容器
容器是現(xiàn)代程序設(shè)計非常基礎(chǔ)而重要的手段。
所謂容器,就是“放東西的東西”。數(shù)組可以看作是一種容器,但是數(shù)組的元素個數(shù)一旦確定就無法改變,這在實(shí)際使用中是很大的不足。一般意義上的容器,是指具有自動增長容量能力的存放數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)。在面向?qū)ο笳Z言中,這種數(shù)據(jù)結(jié)構(gòu)本身表達(dá)為一個對象。所以才有“放東西的東西”的說法。
Java具有豐富的容器,Java的容器具有豐富的功能和良好的性能。熟悉并能充分有效地利用好容器,是現(xiàn)代程序設(shè)計的基本能力。
我們首先學(xué)習(xí)的是順序容器,即放進(jìn)容器中的對象是按照指定的順序(放的順序)排列起來的,而且允許具有相同值的多個對象存在。
Java容器實(shí)際上只有三種:Map , List, Set;但每種接口都有不同的實(shí)現(xiàn)版本.它們的區(qū)別可以歸納為由什么在背后支持它們.也就是說,你使用的接口是由什么樣的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的.

- List的選擇: 比如:ArrayList和LinkedList都實(shí)現(xiàn)了List接口.因此無論選擇哪一個,基本操作都一樣.但ArrayList是由數(shù)組提供底層支持.而LinkedList是由雙向鏈表實(shí)現(xiàn)的.所以,如果要經(jīng)常向List里插入或刪除數(shù)據(jù),LinkedList會比較好.否則應(yīng)該用速度更快的ArrayList。
- Set的選擇 HashSet總是比TreeSet 性能要好.而后者存在的理由就是它可以維持元素的排序狀態(tài).所以,如果需要一個排好序的Set時,才應(yīng)該用TreeSet。
- Map選擇: 同上,盡量選擇HashMap。