什么是面向?qū)ο螅?/h3>
面向?qū)ο?,這是相對面向過程來說,就比如你在開車,你所要關(guān)心的是怎么把車發(fā)
動(dòng)起來,開上路,車就是對象,對著車,開好車就行了。至于車?yán)锩娴陌l(fā)動(dòng)機(jī)是怎
么做活塞運(yùn)動(dòng)等等一系列活動(dòng)(面向過程),你不需要關(guān)心。
什么是覆蓋?
覆蓋的意思是由子類重新定義繼承下來的方法,以改變或延伸此方法的行為。
random()方法
隨機(jī)產(chǎn)生0.0-1.0之間的數(shù)字
對象創(chuàng)建的存放地
創(chuàng)建對象時(shí),對象會(huì)被存放在堆內(nèi)存當(dāng)中。不管對象如何創(chuàng)建都會(huì)放在此區(qū)域中,
Java會(huì)根據(jù)對象的大小來分配內(nèi)存空間。
對象的命名規(guī)則
- 名稱必須以字母、下劃線(_)或$符號(hào)開頭,不能用數(shù)字開頭。
- 除了第一個(gè)字符之外,后面就可以用數(shù)字。反正不要用在第一個(gè)字符就行。
- 不能使用關(guān)鍵字命名。
沒被引用的對象變量值
沒有引用到任何對象的引用變量的值為null值。
Getter與Setter
- Getter:返回實(shí)力變量值
- Setter:設(shè)定實(shí)例變量值
什么是封裝?
- 封裝的基本原則:將實(shí)例變量標(biāo)記為私有的,并提供公有的getter與setter來控制存
取動(dòng)作。
- Java類中的屬性如果沒有特別的需求,都必須聲明為private的,就是只能在本類中
訪問,如果其他類想訪問,就必須通過get,set方法,這就是Java中的一大特征之
一:封裝。從而保證安全性。
- 如果用public(任何類都可以直接訪問)修飾的話,雖然操作簡單,但對數(shù)據(jù)不安全。
(將實(shí)例變量標(biāo)記為private,將getter與setter標(biāo)記為public)
實(shí)例變量的有默認(rèn)值屬性
實(shí)例變量永遠(yuǎn)都會(huì)有默認(rèn)值。如果沒有明確的賦值給實(shí)例變量,或者沒有調(diào)用
setter,實(shí)例變量還是會(huì)有值!
(注意:局部變量沒有默認(rèn)值!如果在變量被初始前就要使用的話,編譯器會(huì)報(bào)
錯(cuò))
變量的比較
- “==”用來判斷兩個(gè)對象是否引用統(tǒng)一對象
- “equals()”用來判斷兩個(gè)對象是否相等(像是兩個(gè)String對象是否帶有
相同的字節(jié)組合)
indexOf的使用
indexOf()在找不到相符合的對象的情況下會(huì)讓indexOf()返回-1
繼承的關(guān)系
次級(jí)類會(huì)繼承上級(jí)類的方法。也就是說,子類會(huì)自動(dòng)獲得父類的功能。
什么是覆蓋?
覆蓋的意思是由子類重新定義繼承下來的方法以改變或延伸此方法的行為。
子類如何調(diào)取父類?
通過super關(guān)鍵詞來取用父類。
public類和private類的繼承問題
- public類型的成員會(huì)被繼承。
- private類型的成員不會(huì)被繼承。
子類
- 子類是extends父類出來的。
- 子類會(huì)繼承父類所有public類型的實(shí)例變量和方法,但不會(huì)繼承父類所有private類型的變量和方法。
- 繼承下來的方法可以被覆蓋掉,但實(shí)例變量不能被覆蓋掉。
- 當(dāng)某個(gè)方法在子類中被覆蓋過,調(diào)用這個(gè)方法時(shí)會(huì)被調(diào)用到覆蓋過的版本,
繼承的意義(P182)
- 避免了重復(fù)的程序代碼
- 定義出共同的協(xié)議。
覆蓋的規(guī)則(P190)
當(dāng)你要覆蓋父類的方法時(shí),你就得同意要履約。比如,這個(gè)合約表示“我沒有參數(shù)且返回布爾
值”。因此,你所覆蓋的方法就必須沒有參數(shù)且返回布爾值。
- 參數(shù)必須要一樣,且返回類型必須要兼容
- 不能降低方法的存取權(quán)限
方法的重載(P191)
重載的意義是兩個(gè)方法的名稱相同,但參數(shù)不同。所以,重載與多態(tài)毫無關(guān)系。
- 返回類型可以不同
- 布恩那個(gè)只改變返回類型
- 可以更改存取權(quán)限
抽象的方法(P203)
- 抽象的類代表此類必須要被extend過,抽象的方法代表此方法一定要被覆蓋過。
- 抽象的方法沒有實(shí)體。
- 如果你聲明出一個(gè)抽象的方法,就必須將此類也標(biāo)記為抽象的。你不能在非抽象類仲擁有抽
象方法。
- 抽象的方法沒有內(nèi)容,它只是為了標(biāo)記出多態(tài)而存在,這表示在繼承書結(jié)構(gòu)下的第一個(gè)具體
類必須要實(shí)現(xiàn)出所有的抽象方法。
- 必須實(shí)現(xiàn)所有抽象的方法——表示說必須寫出內(nèi)容。必須以相同的方法鑒名(名稱和參數(shù))
和相容的返回類型創(chuàng)建出的非抽象得方法。
Object類
在Java中的所有類都是從Object這個(gè)類繼承出來的。Object這個(gè)類是所有類的源頭,它是所有類的
父類。(P208)
棧與堆:生存空間(P236)
- 內(nèi)存中的兩種區(qū)域:對象的生存空間堆(heap)和方法調(diào)用及變量的生存空間(stack)。
- 實(shí)例變量是被聲明在類而不是方法里面。
- 局部變量和方法的參數(shù)都是被聲明在方法中。
- 當(dāng)你調(diào)用一個(gè)方法是,改方法會(huì)放在調(diào)用棧的棧頂。
- 棧頂上的方法是目前正在執(zhí)行的方法。
什么是構(gòu)造函數(shù)?
- 構(gòu)造函數(shù)是用來初始化對象的狀態(tài),也就是說設(shè)置和給對象的實(shí)例變量賦值。(P243)
- 在創(chuàng)建新對象時(shí),所有繼承下來的構(gòu)造函數(shù)都會(huì)被執(zhí)行。(P251)
- 在構(gòu)造函數(shù)仲用super調(diào)用父類的構(gòu)造函數(shù)的部分。(P251)
- 編譯器幫忙加的一定會(huì)是沒有參數(shù)的版本,假使父類有多個(gè)重載版本,也只有無參數(shù)的這個(gè)版本會(huì)
被調(diào)用到。(P253)
什么是this?
this就是個(gè)對對象本身的引用。this()只能用在構(gòu)造函數(shù)中,且它必須是第一行語句!每個(gè)構(gòu)造函數(shù)
可以選擇調(diào)用super()或this(),但不能同時(shí)調(diào)用。(P256)
局部變量的使用范圍
局部變量只會(huì)存活與哦在聲明該變量的方法中。(P258)
為什么不用的對象要及時(shí)回收?
對象用完了就要拋棄,這樣才能讓垃圾回收器有東西可以回收。如果你把持著對象
不放,垃圾收集器也幫不了什么忙。(P260)
靜態(tài)
- 靜態(tài)的方法不能調(diào)用非靜態(tài)的變量(P277)
- 靜態(tài)的方法也不能調(diào)用非靜態(tài)的方法(P278)
- 靜態(tài)變量的值對所有的實(shí)例來說都相同(P279)
- 靜態(tài)變量是共享的;
- 同一類所有的實(shí)例共享一份靜態(tài)變量;(P280)
- 實(shí)例變量:每一個(gè)實(shí)例一個(gè)
- 靜態(tài)變量:每個(gè)類一個(gè)
- 靜態(tài)變量會(huì)在該類的任何對象創(chuàng)建之前就完成初始化;(P281)
- 靜態(tài)變量會(huì)在該類的任何靜態(tài)方法執(zhí)行之前就初始化;
- 靜態(tài)的final變量是常數(shù),常數(shù)變量的名稱應(yīng)該要都是大寫字母。(P282)、
try/catch注意點(diǎn)
如果try或catch塊有return指令,finally還是會(huì)執(zhí)行!流程會(huì)跳到finally然后再回到return指令。(P327)
內(nèi)部類使用技巧
內(nèi)部類可以使用外部所有的方法與變量,就算是私用的也一樣。內(nèi)部類把存取外部類的方法和變量當(dāng)作是開自家冰箱。(P376)
如何理解串流?
將串流(stream)連接起來代表來源與目的地(文件或網(wǎng)絡(luò)端口)的連接。串流必須要連接到某處才能算是個(gè)串流。(P433)
序列化的使用
當(dāng)對象被序列化時(shí),被改對象引用的實(shí)例變量也會(huì)被序列化。且所有被引用的對象也會(huì)被序列化。(P436)
File對象
File對象代表磁盤上的文件或目錄的路徑名稱,如:/User/Kathy/Data/GameFile.txt但它并不能讀取或代表文件中的數(shù)據(jù)。(P452)
讀取是以while循環(huán)來逐行進(jìn)行,一直到readLine()的結(jié)果為null為止。(P454)
split()
split()會(huì)用參數(shù)所指定的字符串把這個(gè)String拆開成兩個(gè)部分。(P458)
在Java中以大寫字母開始的東西是類。(P490)
為什么會(huì)發(fā)生死鎖?
死鎖會(huì)發(fā)生是因?yàn)閮蓚€(gè)線程互相持有對方正在等待的東西。(P516)
Map
Map中的元素實(shí)際上是兩個(gè)對象:關(guān)鍵字和值。值可以重復(fù),但是key不行。
HashMap
HashMap需要兩個(gè)類型參數(shù),關(guān)鍵字和值
面向?qū)ο?,這是相對面向過程來說,就比如你在開車,你所要關(guān)心的是怎么把車發(fā)
動(dòng)起來,開上路,車就是對象,對著車,開好車就行了。至于車?yán)锩娴陌l(fā)動(dòng)機(jī)是怎
么做活塞運(yùn)動(dòng)等等一系列活動(dòng)(面向過程),你不需要關(guān)心。
覆蓋的意思是由子類重新定義繼承下來的方法,以改變或延伸此方法的行為。
隨機(jī)產(chǎn)生0.0-1.0之間的數(shù)字
創(chuàng)建對象時(shí),對象會(huì)被存放在堆內(nèi)存當(dāng)中。不管對象如何創(chuàng)建都會(huì)放在此區(qū)域中,
Java會(huì)根據(jù)對象的大小來分配內(nèi)存空間。
- 名稱必須以字母、下劃線(_)或$符號(hào)開頭,不能用數(shù)字開頭。
- 除了第一個(gè)字符之外,后面就可以用數(shù)字。反正不要用在第一個(gè)字符就行。
- 不能使用關(guān)鍵字命名。
沒有引用到任何對象的引用變量的值為null值。
- Getter:返回實(shí)力變量值
- Setter:設(shè)定實(shí)例變量值
- 封裝的基本原則:將實(shí)例變量標(biāo)記為私有的,并提供公有的getter與setter來控制存
取動(dòng)作。 - Java類中的屬性如果沒有特別的需求,都必須聲明為private的,就是只能在本類中
訪問,如果其他類想訪問,就必須通過get,set方法,這就是Java中的一大特征之
一:封裝。從而保證安全性。 - 如果用public(任何類都可以直接訪問)修飾的話,雖然操作簡單,但對數(shù)據(jù)不安全。
(將實(shí)例變量標(biāo)記為private,將getter與setter標(biāo)記為public)
實(shí)例變量永遠(yuǎn)都會(huì)有默認(rèn)值。如果沒有明確的賦值給實(shí)例變量,或者沒有調(diào)用
setter,實(shí)例變量還是會(huì)有值!
(注意:局部變量沒有默認(rèn)值!如果在變量被初始前就要使用的話,編譯器會(huì)報(bào)
錯(cuò))
- “==”用來判斷兩個(gè)對象是否引用統(tǒng)一對象
- “equals()”用來判斷兩個(gè)對象是否相等(像是兩個(gè)String對象是否帶有
相同的字節(jié)組合)
indexOf()在找不到相符合的對象的情況下會(huì)讓indexOf()返回-1
次級(jí)類會(huì)繼承上級(jí)類的方法。也就是說,子類會(huì)自動(dòng)獲得父類的功能。
覆蓋的意思是由子類重新定義繼承下來的方法以改變或延伸此方法的行為。
通過super關(guān)鍵詞來取用父類。
- public類型的成員會(huì)被繼承。
- private類型的成員不會(huì)被繼承。
- 子類是extends父類出來的。
- 子類會(huì)繼承父類所有public類型的實(shí)例變量和方法,但不會(huì)繼承父類所有private類型的變量和方法。
- 繼承下來的方法可以被覆蓋掉,但實(shí)例變量不能被覆蓋掉。
- 當(dāng)某個(gè)方法在子類中被覆蓋過,調(diào)用這個(gè)方法時(shí)會(huì)被調(diào)用到覆蓋過的版本,
- 避免了重復(fù)的程序代碼
- 定義出共同的協(xié)議。
當(dāng)你要覆蓋父類的方法時(shí),你就得同意要履約。比如,這個(gè)合約表示“我沒有參數(shù)且返回布爾
值”。因此,你所覆蓋的方法就必須沒有參數(shù)且返回布爾值。
- 參數(shù)必須要一樣,且返回類型必須要兼容
- 不能降低方法的存取權(quán)限
重載的意義是兩個(gè)方法的名稱相同,但參數(shù)不同。所以,重載與多態(tài)毫無關(guān)系。
- 返回類型可以不同
- 布恩那個(gè)只改變返回類型
- 可以更改存取權(quán)限
- 抽象的類代表此類必須要被extend過,抽象的方法代表此方法一定要被覆蓋過。
- 抽象的方法沒有實(shí)體。
- 如果你聲明出一個(gè)抽象的方法,就必須將此類也標(biāo)記為抽象的。你不能在非抽象類仲擁有抽
象方法。 - 抽象的方法沒有內(nèi)容,它只是為了標(biāo)記出多態(tài)而存在,這表示在繼承書結(jié)構(gòu)下的第一個(gè)具體
類必須要實(shí)現(xiàn)出所有的抽象方法。 - 必須實(shí)現(xiàn)所有抽象的方法——表示說必須寫出內(nèi)容。必須以相同的方法鑒名(名稱和參數(shù))
和相容的返回類型創(chuàng)建出的非抽象得方法。
在Java中的所有類都是從Object這個(gè)類繼承出來的。Object這個(gè)類是所有類的源頭,它是所有類的
父類。(P208)
- 內(nèi)存中的兩種區(qū)域:對象的生存空間堆(heap)和方法調(diào)用及變量的生存空間(stack)。
- 實(shí)例變量是被聲明在類而不是方法里面。
- 局部變量和方法的參數(shù)都是被聲明在方法中。
- 當(dāng)你調(diào)用一個(gè)方法是,改方法會(huì)放在調(diào)用棧的棧頂。
- 棧頂上的方法是目前正在執(zhí)行的方法。
- 構(gòu)造函數(shù)是用來初始化對象的狀態(tài),也就是說設(shè)置和給對象的實(shí)例變量賦值。(P243)
- 在創(chuàng)建新對象時(shí),所有繼承下來的構(gòu)造函數(shù)都會(huì)被執(zhí)行。(P251)
- 在構(gòu)造函數(shù)仲用super調(diào)用父類的構(gòu)造函數(shù)的部分。(P251)
- 編譯器幫忙加的一定會(huì)是沒有參數(shù)的版本,假使父類有多個(gè)重載版本,也只有無參數(shù)的這個(gè)版本會(huì)
被調(diào)用到。(P253)
this就是個(gè)對對象本身的引用。this()只能用在構(gòu)造函數(shù)中,且它必須是第一行語句!每個(gè)構(gòu)造函數(shù)
可以選擇調(diào)用super()或this(),但不能同時(shí)調(diào)用。(P256)
局部變量只會(huì)存活與哦在聲明該變量的方法中。(P258)
對象用完了就要拋棄,這樣才能讓垃圾回收器有東西可以回收。如果你把持著對象
不放,垃圾收集器也幫不了什么忙。(P260)
- 靜態(tài)的方法不能調(diào)用非靜態(tài)的變量(P277)
- 靜態(tài)的方法也不能調(diào)用非靜態(tài)的方法(P278)
- 靜態(tài)變量的值對所有的實(shí)例來說都相同(P279)
- 靜態(tài)變量是共享的;
- 同一類所有的實(shí)例共享一份靜態(tài)變量;(P280)
- 實(shí)例變量:每一個(gè)實(shí)例一個(gè)
- 靜態(tài)變量:每個(gè)類一個(gè)
- 靜態(tài)變量會(huì)在該類的任何對象創(chuàng)建之前就完成初始化;(P281)
- 靜態(tài)變量會(huì)在該類的任何靜態(tài)方法執(zhí)行之前就初始化;
- 靜態(tài)的final變量是常數(shù),常數(shù)變量的名稱應(yīng)該要都是大寫字母。(P282)、
如果try或catch塊有return指令,finally還是會(huì)執(zhí)行!流程會(huì)跳到finally然后再回到return指令。(P327)
內(nèi)部類可以使用外部所有的方法與變量,就算是私用的也一樣。內(nèi)部類把存取外部類的方法和變量當(dāng)作是開自家冰箱。(P376)
將串流(stream)連接起來代表來源與目的地(文件或網(wǎng)絡(luò)端口)的連接。串流必須要連接到某處才能算是個(gè)串流。(P433)
當(dāng)對象被序列化時(shí),被改對象引用的實(shí)例變量也會(huì)被序列化。且所有被引用的對象也會(huì)被序列化。(P436)
File對象代表磁盤上的文件或目錄的路徑名稱,如:/User/Kathy/Data/GameFile.txt但它并不能讀取或代表文件中的數(shù)據(jù)。(P452)
讀取是以while循環(huán)來逐行進(jìn)行,一直到readLine()的結(jié)果為null為止。(P454)
split()會(huì)用參數(shù)所指定的字符串把這個(gè)String拆開成兩個(gè)部分。(P458)
死鎖會(huì)發(fā)生是因?yàn)閮蓚€(gè)線程互相持有對方正在等待的東西。(P516)
Map中的元素實(shí)際上是兩個(gè)對象:關(guān)鍵字和值。值可以重復(fù),但是key不行。
HashMap需要兩個(gè)類型參數(shù),關(guān)鍵字和值