008 面向?qū)ο笠?/span>
2016-01-23
1、面向過程-----> 面向?qū)ο?br>
面向過程:面向的是完成這件事兒的過程,強(qiáng)調(diào)的是完成這件事兒的動作。
把大象塞進(jìn)冰箱里
1、打開冰箱門
2、把大象塞進(jìn)去,親下大象的屁股
3、關(guān)閉冰箱門
如果我們用面向過程的思想來解決這件事兒,當(dāng)執(zhí)行這件事的人的不同的時候,
我們需要為每個不同的人量身定做解決事情的方法。
我們在代碼中描述一個對象,通過描述這個對象的屬性和方法
對象必須是看得見摸得著的
燈:屬性和方法
屬性:
外形:長的
亮度:500W
顏色:白色
牌子:XX
方法:發(fā)光
電風(fēng)扇:屬性、方法
外形:三個扇葉
顏色:白色
品牌:XX
方法:轉(zhuǎn)動,扇風(fēng)
我們把這些具有相同屬性和相同方法的對象進(jìn)行進(jìn)一步的封裝,抽象出來 類這個概念。
類就是個模子,確定了對象應(yīng)該具有的屬性和方法。
對象是根據(jù)類創(chuàng)建出來的。
類就是一個蓋大樓的圖紙 對象 就是蓋出來的大樓。
2、類
語法:
[public] class 類名
{
字段;
屬性;
方法;
}
寫好了一個類之后,我們需要創(chuàng)建這個類的對象,
那么,我們管創(chuàng)建這個類的對象過程稱之為類的實例化。
使用關(guān)鍵字 new.
this:表示當(dāng)前這個類的對象。
類是不占內(nèi)存的,而對象是占內(nèi)存的。
3、屬性
屬性的作用就是保護(hù)字段、對字段的賦值和取值進(jìn)行限定。
屬性的本質(zhì)就是兩個方法,一個叫g(shù)et()一個叫set()。
既有g(shù)et()也有set()我們誠之為可讀可寫屬性。
只有g(shù)et()沒有set()我們稱之為只讀屬性
沒有g(shù)et()只有set()我們稱之為只寫屬性
Field字段
Method方法
Property屬性
****字段就是女人 屬性才是男人。
4、訪問修飾符
public:公開的公共的,在哪都能訪問。
private:私有的,只能在當(dāng)前類的內(nèi)部進(jìn)行訪問,出了這個類就訪問不到了。
5、
當(dāng)我們創(chuàng)建好一個類的對象后,需要給這個對象的每個屬性去賦值。
我們管這個過程稱之為對象的初始化。
6、靜態(tài)和非靜態(tài)的區(qū)別
1)、在非靜態(tài)類中,既可以有實例成員,也可以有靜態(tài)成員。
2)、在調(diào)用實例成員的時候,需要使用對象名.實例成員;
在調(diào)用靜態(tài)成員的時候,需要使用類名.靜態(tài)成員名;
總結(jié):靜態(tài)成員必須使用類名去調(diào)用,而實例成員使用對象名調(diào)用。
靜態(tài)函數(shù)中,只能訪問靜態(tài)成員,不允許訪問實例成員。
實例函數(shù)中,既可以使用靜態(tài)成員,也可以使用實例成員。
靜態(tài)類中只允許有靜態(tài)成員,不允許出現(xiàn)實例成員。
使用:
1)、如果你想要你的類當(dāng)做一個"工具類"去使用,這個時候可以考慮將類寫成靜態(tài)的。
2)、靜態(tài)類在整個項目中資源共享。
只有在程序全部結(jié)束之后,靜態(tài)類才會釋放資源。
堆 棧 靜態(tài)存儲區(qū)域
釋放資源。GC Garbage Collection垃圾回收器
7、構(gòu)造函數(shù)
作用:幫助我們初始化對象(給對象的每個屬性依次的賦值)
構(gòu)造函數(shù)是一個特殊的方法:
1)、構(gòu)造函數(shù)沒有返回值,連void也不能寫。
2)、構(gòu)造函數(shù)的名稱必須跟類名一樣。
創(chuàng)建對象的時候會執(zhí)行構(gòu)造函數(shù)
構(gòu)造函數(shù)是可以有重載的。
***
類當(dāng)中會有一個默認(rèn)的無參數(shù)的構(gòu)造函數(shù),當(dāng)你寫一個新的構(gòu)造函數(shù)之后,不管是有參數(shù)的還是
無參數(shù)的,那個默認(rèn)的無參數(shù)的構(gòu)造函數(shù)都被干掉了。
8、new關(guān)鍵字
Person zsPerson=new Person();
new幫助我們做了3件事兒:
1)、在內(nèi)存中開辟一塊空間
2)、在開辟的空間中創(chuàng)建對象
3)、調(diào)用對象的構(gòu)造函數(shù)進(jìn)行初始化對象
9、this關(guān)鍵字
1)、代表當(dāng)前類的對象
2)、在類當(dāng)中顯示的調(diào)用本類的構(gòu)造函數(shù) :this
10、命名空間
可以認(rèn)為類是屬于命名空間的。
如果在當(dāng)前項目中沒有這個類的命名空間,需要我們手動的導(dǎo)入這個類所在的
命名空間。
1)、用鼠標(biāo)去點
2)、alt+shift+F10
3)、記住命名空間,手動的去引用
11、在一個項目中引用另一個項目的類
1)、添加引用
2)、引用命名空間
12、值類型和引用類型
區(qū)別:
1、值類型和引用類型在內(nèi)存上存儲的地方不一樣。
2、在傳遞值類型和傳遞引用類型的時候,傳遞的方式不一樣。
值類型我們稱之為值傳遞,引用類型我們稱之為引用傳遞。
我們學(xué)的值類型和引用類型:
值類型:int、double、bool、char、decimal、struct、enum
引用類型:string、自定義類、數(shù)組
存儲:
值類型的值是存儲在內(nèi)存的棧當(dāng)中。
引用類型的值是存儲在內(nèi)存的堆中。
13、字符串
1)、字符串的不可變性
當(dāng)你給一個字符串重新賦值之后,老值并沒有銷毀,而是重新開辟一塊空間存儲新值。
當(dāng)程序結(jié)束后,GC掃描整個內(nèi)存,如果發(fā)現(xiàn)有的空間沒有被指向,則立即把它銷毀。
2)、我們可以講字符串看做是char類型的一個只讀數(shù)組。
ToCharArray();將字符串轉(zhuǎn)換為char數(shù)組
new string(char[] chs):能夠?qū)har數(shù)組轉(zhuǎn)換為字符串
14、字符串提供的各種方法
1)、Length:獲得當(dāng)前字符串中字符的個數(shù)
2)、ToUpper():將字符轉(zhuǎn)換成大寫形式
3)、ToLower():將字符串轉(zhuǎn)換成小寫形式
4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比較兩個字符串,可以忽略大小寫
5)、Split():分割字符串,返回字符串類型的數(shù)組。
6)、Substring():解決字符串。在截取的時候包含要截取的那個位置。
7)、IndexOf():判斷某個字符串在字符串中第一次出現(xiàn)的位置,如果沒有返回-1、值類型和引用類型在內(nèi)存上存儲的地方不一樣。
8)、LastIndexOf():判斷某個字符串在字符串中最后一次出現(xiàn)的位置,如果沒有同樣返回-1
9)、StartsWith():判斷以....開始
10)、EndsWith():判斷以...結(jié)束
11)、Replace():將字符串中某個字符串替換成一個新的字符串
12)、Contains():判斷某個字符串是否包含指定的字符串
13)、Trim():去掉字符串中前后的空格
14)、TrimEnd():去掉字符串中結(jié)尾的空格
15)、TrimStart():去掉字符串中前面的空格
16)、string.IsNullOrEmpty():判斷一個字符串是否為空或者為null
17)、string.Join():將數(shù)組按照指定的字符串連接,返回一個字符串。
15、繼承
我們可能會在一些類中,寫一些重復(fù)的成員,我們可以將這些重復(fù)的成員,
單獨的封裝到一個類中,作為這些類的父類。
Student、Teacher、Driver 子類 派生類
Person 父類 基類
子類繼承了父類,那么子類從父類那里繼承過來了什么?
首先,子類繼承了父類的屬性和方法,但是子類并沒有繼承父類的私有字段。
問題:子類有沒有繼承父類的構(gòu)造函數(shù)?
答:子類并沒有繼承父類的構(gòu)造函數(shù),但是。子類會默認(rèn)的調(diào)用父類無參數(shù)的構(gòu)造函數(shù),
創(chuàng)建父類對象,讓子類可以使用父類中的成員。
所以,如果在父類中重新寫了一個有參數(shù)的構(gòu)造函數(shù)之后,那個無參數(shù)的就被干掉了,
子類就調(diào)用不到了,所以子類會報錯。
解決辦法:
1)、在父類中重新寫一個無參數(shù)的構(gòu)造函數(shù)。
2)、在子類中顯示的調(diào)用父類的構(gòu)造函數(shù),使用關(guān)鍵字:base()
16、繼承的特性
1、繼承的單根性:一個子類只能有一個父類。
2、繼承的傳遞性
17、查看類圖
18、object是所有類的基類。
19、new關(guān)鍵字
1)、創(chuàng)建對象
2)、隱藏從父類那里繼承過來的同名成員。
隱藏的后果就是子類調(diào)用不到父類的成員。
浙公網(wǎng)安備 33010602011771號