《java編程思想(第四版)》第一二章學習筆記

@(《Java編程思想(第四版)》第一二章小結)編程

一.Introduction

第一篇博客發佈,渴望作好 Java後端開發 ,但願你們能夠多多指教!後端

1.抽象過程

人解決問題的複雜性取決於抽象的類型和質量。
(1)彙編語言 是對 底層機器 的輕微抽象。
(2)C 等語言是對 彙編語言 的抽象。
以上語言的所作的抽象在解決問題時,要基於計算機的結構(移植性很差,維護成本較高)。
(3)Java 是針對解問題建模,以虛擬機做爲中間層,方便移植,跨平臺性極好。安全

2.面嚮對象語言(包括Java)的五個基本特性

(1)萬物皆爲對象
(2)程序是對象的集合,他們經過發送消息來告訴彼此想要作的
(3)每一個對象都有本身的由其餘對象所構成的存儲(全部的類都有同一個基類)。
(4)每一個對象都有類。(每一個對象都是某個類的一個實例)
(5)某一特定類型的全部對象均可以接受一樣的消息(例:後面一個"圓形"類型的對象可以接受全部發送給"幾何型"對象的消息)網絡

3.每一個對象都提供服務

將對象看作服務,有助於提升對象的內聚性。(問題通常將過多的功能集中在一個對象中。)高內聚即將對象各個功能" 組合 "的很好。良好的面向對象的設計中,每一個對象很好的完成一項任務,但不去作更多的事情。
(1)第一個對象提供支票排版的目錄的服務
(2)第二個對象是通用的打印接口(打印服務)
(3)第三個對象調用另外兩個對象的服務完成最終的打印併發

4.public、private、protected三者的區別

(1)public後面的元素對任何對象都是可用的。
(2)private除類型建立者和類型的內部方法以外任何人都不能訪問。
(3)protected與private的做用至關,差異在於繼承的類能夠訪問protected成員,可是不能訪問private成員。函數

5.Java的默認訪問權限(包訪問權限)

類能夠訪問同一個包(庫構件)中的其餘類的成員,包以外這些成員至關於指定了private。學習

6.組合與繼承

(1)組合:利用現有的類合成新類(若是組合是動態發生的,組合被稱爲聚合)
新類的成員對象常被聲明爲private,不干擾客戶端代碼的狀況下,在運行時修改這些成員對象,來動態修改程序。
(2)繼承:源類(基類、超類或父類)發生變更後,被修改的副本(導出類、繼承類或子類)
(例:幾何形——圓形、正方形、三角形(每種都具備額外的特性和行爲))
思考---
1°:導出類+新方法——基類需不須要此方法
2°:導出類可以使用與基類同名的方法來覆蓋基類中同名的方法(即便用相同的接口方法,在新類中作些不一樣的事情
3°:前期綁定:非面向對象的編譯器產生的函數調用會引發所謂的前期綁定,編譯器產生一個具體函數名字的調用,而運行時將這個調用解析到被執行的代碼的絕對地址。
4°:後期綁定:面向對象編程時,程序直到運行時才能肯定代碼的地址,故採用後期綁定。設計

7.多態

編譯器編譯doSomething()的代碼時,不肯定doSomething()的確切類型。若是指望它的編譯結果是調用基類Shape的erase()和draw()版本,而不是具體的Circle、Square或Line的相應版本。多態使得事情老是正確被處理。
1.定義:多態—不一樣類的對象對同一消息作出響應,同一消息根據對象的不一樣採用不一樣的行爲方式。
2.實現方式:經過動態綁定實現多態,執行期間根據對象的實際類型,調用其相應的方法。
3.條件
(1)繼承
(2)覆蓋(方法重寫)
(3)父類引用指向子類對象3d

8.容器(本身最淺顯的理解)

容器的基本理解:不知道解決某個特定問題須要多少個對象,或者他們將存活多久,就不知道如何存儲這些對象,去找容器。被稱爲容器的新對象,在任什麼時候候均可以擴充本身來容納要置於其中的全部東西。所以不須要知道未來有多少對象置於容器中,只要本身建立一個容器對象,而後讓它處理全部細節。

9.參數化類型

容器 存儲Java中的通用類型:Object單根繼承結構意味着全部的東西都是Object類型,能夠存儲Object的容易能夠存儲任何東西,於是很容易被複用。使用這樣的容器,在其內置入對象引用,稍後將其取回。
(1)將對象置入容器時,它必須被向上轉型爲Object,所以會丟失身份(向上轉型:子類轉向基類或稱父類
(2)將它取出時,獲取對Object對象的引用,不是置入時的那個類型的對象的引用。須要向下轉型爲置入時那個類型的對象的引用。(向下轉型:父類或稱基類轉向子類)可是向下轉型有很大的危險性,若是出現錯誤會引起異常。
經過參數化機制編譯器能夠定製一個只收納和取出Shape對象的容器,則能較爲安全快捷的實現向上轉型向下轉型

10.併發編程

一個處理器在同一時刻能夠執行多個任務。即程序可以停下當前的工做,轉而去處理某個其餘問題,而後返回主進程。上述概念在java中成爲併發,併發中有一個隱患:共享資源。多個並行任務都要訪問同一資源,那麼就會出問題。緣由:以兩個進程同時向一臺打印機發送信息爲例,一個進程執行中,另外一個進程進來,前一個進程須要保護現場,至關於保護罪犯現場,別的人不能進來,所以會出現問題。解決這個問題,對訪問共享資源的多個任務,有一個進程在訪問共享資源時上鎖,其餘進程不能進來,訪問結束後,釋放資源鎖,其餘任務可使用共享資源。

二.Everything Is an Object

1.用引用操縱對象

Java儘管將一切都看做對象,但操做的標識符其實是對象的一個「引用」。能夠想象成遙控器(引用)來操縱電視機(對象)。
(1)遙控器(引用)能夠在房間的不一樣位置,仍能調控電視機(對象)。
(2)沒有電視機,遙控器也能夠獨立存在。

2.存儲位置

(1) 寄存器。寄存器是最快的存儲區,位於不一樣與其餘存儲區的地方—處理器內部。

(2) 堆棧。對象的引用放在堆棧中。

(3) 堆。Java的全部對象存放在堆中。

(4) 常量存儲。常量值直接放在代碼內部,在嵌入式系統中,常量會放在ROM中(只讀存儲器)。

(5) 非RAM存儲。數據活在程序以外,徹底不受程序的控制。兩個基本的例子是流對象持久化對象
  1°:流對象:對象轉化成字節流,一般被髮送給另外一臺機器。
  2°:持久化對象:它被放在磁盤上,即使程序終止,他們仍能夠保持本身的狀態。這種技巧:對象能夠轉化爲其餘媒介上的事物,須要時能夠恢復成常規的、基於RAM的對象。

3.基本類型(無需使用new便可建立)

通常使用new建立一個對象,將其放在堆裏,但這種方法對建立特別小的、簡單的變量每每不是頗有效。而基本類型所具備的包裝類,使得能夠在堆中建立一個非基本對象,用來表示對應的基本類型。(無需使用new)
(1)char c = ‘x’;
(2)Character ch = new Character(‘x’); //這個有new
(3)Character ch = ‘x’; //Java的自動包裝功能能夠自動將基本類型轉爲包裝器類型。
   char ch = new Character(‘x’);

4.new建立對象的做用域

new建立的對象在執行過程當中可能一直存在,只是對象的引用可能會因超出做用域範圍而不可用。好像遙控器在電視機的屋子裏可使用,可是拿到另外一個屋子裏面就不能控制電視機了,可是電視機仍然存在。

5.static的做用

一般狀況下,建立類時,就是在描述那個類的對象的外觀和行爲。除非用new建立那個類的對象,才能分配數據空間,方法才能夠被調用。當時有兩種情形是沒法解決的。
(1)只想爲某特定區域分配單一存儲空間,不考慮要建立多少個對象,甚至不考慮建立對象。
(2)但願某個方法不與包含它的類的任何對象實例關聯在一塊兒。即沒有建立對象,也能夠經過類調用這個方法。
在此情形下誕生了static:

class StaticTest{
    static int i=47;
}
//調用方法:
StaticTest.i++;
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
st1.i++;
st2.i++;
//在此情形下i的數值增長了3次,此時i==50.
class Incremental(){
static void increment(){    
    StaticTest.i++;
}
}   
Incremental.increment();
Incremental sf = new Incremental();
sf.increment();
//在此情形下,i增長了兩次。

6.javadoc註釋(未詳細查看,暫時認識不到它的重要性)

但願有心人能夠補充一下!!!!

7.《Thinking in Java》第四版課後習題答案連接:

http://greggordon.org/java/tij4/solutions.htm
連接來自網絡,若有違權,聯繫後即刻刪除!!!!!

三.疑惑點

1.對象引用和對象引用的區別

1°:使用文字的形式說明

eg:Vehicle veh1 = new Vehicle();
這個語句的目的是建立一個對象,其實包含了四個動做。
(1)右面的 」new Vehicle「 ,以Vehicle爲模板,在堆裏面建立了一個Vehicle類對象。
(2)末尾的「 () 」意味着,對象建立後,當即調用Vehicle類的構造函數,對剛生成的對象進行初始化。構造函數必定會存在,若是不存在,java默認生成一個構造函數。
(3)左邊的「Vehicle veh1」是建立一個Vehicle類引用變量,放在棧裏面,即之後用來指向Vehicle對象的對象引用
(4)「=」操做符,將對象引用指向建立的對象。

2°:使用圖例加以說明

對象以及對象引用圖示

2.基本類型和其對應的包裝容器類的區別

(1)基本類型直接存儲在棧中 · 基本類型具備的包裝容器,在堆中建立一個非基本對象,用來表示對應的基本類型 (2)基本類型與包裝容器類對應以下    boolean Boolearn    byte Byte    short Short    char Character    int Int    float Float    long Long    double Double (3)僅僅學習前兩章節,涉及較少,後面回來補充!!!

相關文章
相關標籤/搜索