激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

《java編程思想》讀書(shū)筆記

時(shí)間:2020-12-07 20:20:20 讀書(shū)筆記 我要投稿

《java編程思想》讀書(shū)筆記

  這是一份試圖提綱挈領(lǐng)的讀書(shū)筆記,《java編程思想》這本八百多頁(yè)的書(shū)娓娓道來(lái)地包含了太多細節,這對讀者是非常貼心的,我也強烈建議細細讀這本書(shū),如果你希望在短時(shí)間內學(xué)會(huì )java這種語(yǔ)言,那么這本書(shū)不是最好的選擇,你可以看看譚浩強系列。我把看這本書(shū)的過(guò)程中,個(gè)人覺(jué)得每一章中最重要的思想、用整理在這里,希望自己回顧的時(shí)候有所參照和提高。也希望大家帶著(zhù)同樣的目的來(lái)看本篇讀書(shū)筆記。

《java編程思想》讀書(shū)筆記

  第一章 對象導論

  比起過(guò)程型語(yǔ)言編寫(xiě)的程序,用面向對象語(yǔ)言編寫(xiě)的程序更加簡(jiǎn)單、易于理解、可復用!禼++編程思想》里也有這一章,是一個(gè)拋磚引自己的玉的章節,不明白可以跳過(guò),回頭再看。

  第二章 一切都是對象

  java語(yǔ)言里面,一切都是對象,并且程序員是通過(guò)引用來(lái)操縱對象。一個(gè)簡(jiǎn)單的例子,非常輕松地讓讀者進(jìn)入java的世界。需要注意的是java數據會(huì )儲存在5個(gè)不同的地方:寄存器、堆棧、堆、常量存儲、非ram存儲,用new創(chuàng )建的一般對象都放在堆中,而特殊的基本對象放在堆棧中,如果想把基本對象也放在堆中,需要包裝基本類(lèi)型。

  第三章 操作符

  java中的操作符語(yǔ)法類(lèi)似于c,所以學(xué)習起來(lái)一點(diǎn)困難也沒(méi)有。要特別注意兩個(gè)比較大的整數相加或者相乘的時(shí)候的溢出問(wèn)題,用long或者biginteger解決這個(gè)問(wèn)題。

  第四章 控制執行流程

  我想起《pointer on c》這本書(shū)第一章就有這一句話(huà),本書(shū)適合那些希望迅速學(xué)習一門(mén)新語(yǔ)言而不是被“為什么if和for很重要”的弱智問(wèn)題耽擱進(jìn)度的讀者。呵呵,這一章很不厭其煩地介紹了運算、操作符優(yōu)先級、類(lèi)型轉換、選擇循環(huán)等基本特性,有c或者c++編程經(jīng)驗的讀者可以大概瀏覽一下。

  第五章 初始化和清理

  關(guān)于初始化:

  1.初始化很重要,一定不要忘記。而且java編譯器會(huì )很好的防止使用未初始化數據的意外,這是比c和c++更優(yōu)的地方。

  2.編譯器初始化的順序為:

  a.類(lèi)首次加載的時(shí)候,有關(guān)靜態(tài)初始化的所有動(dòng)作都會(huì )執行。

  a1.類(lèi)的加載包括首次創(chuàng )建該類(lèi)型的對象,或者該類(lèi)的靜態(tài)方法/靜態(tài)域首次被訪(fǎng)問(wèn)

  a2.靜態(tài)域的初始化在一切初始化之前,即靜態(tài)變量散布在代碼不同的地方,它們也會(huì )在任何方法(包括構造器)調用之前被初始化

  b.當用new calssname()創(chuàng )建對象的時(shí)候,會(huì )在堆上開(kāi)辟足夠的存儲空間,這塊存儲空間被清零,然后執行字段的初始化動(dòng)作。(這里的字段初始化都是非靜態(tài)的,因為靜態(tài)的變量已經(jīng)在a中執行完畢,而且靜態(tài)變量存儲在不同的地方,靜態(tài)數據只占用一份存儲空間)

  c.執行構造器

  關(guān)于清理

  c++關(guān)于清理的部分包含很大不確定性。目前需要知道的事情是,正常情況下,我們是不需要調用finalize方法的,而且垃圾回收區會(huì )自動(dòng)回收不再使用的對象,同時(shí)我們需要自己注意一些需要關(guān)閉的文件。

  需要注意的是,用=對數組進(jìn)行“賦值”的時(shí)候,實(shí)際上是引用的傳遞,就是說(shuō),二者指向同一堆。

  第六章 訪(fǎng)問(wèn)權限控制

  關(guān)于包

  你應該有一個(gè)自己的域名,這樣發(fā)布你的java程序的時(shí)候,就可以將你的包名設置為你的域名倒轉。想要正確讓包工作,要正確設置classpath,對于新手來(lái)說(shuō),這的確是一個(gè)挑戰。我當初就難到了。

  關(guān)于訪(fǎng)問(wèn)權限修飾詞

  值得注意的是,如果兩個(gè)編譯單元放在同一個(gè)目錄下并且都沒(méi)有設置包名的話(huà),他們對于對方都是擁有包訪(fǎng)問(wèn)權限的。訪(fǎng)問(wèn)權限修飾詞是修飾方法和數據,而不是類(lèi)。類(lèi)只有兩種訪(fǎng)問(wèn)權限,包訪(fǎng)問(wèn)權限或public訪(fǎng)問(wèn)權限。默認為包訪(fǎng)問(wèn)權限。如果不希望其它任何人對該類(lèi)擁有訪(fǎng)問(wèn)權限,可以把所有的構造器設置為private。但是有一個(gè)例外,可以通過(guò)該類(lèi)自己的static成員內部創(chuàng )建(于是就有了工廠(chǎng)設計模式和單例設計模式)。

  第七章 復用類(lèi)

  有三種方法復用類(lèi):組合,繼承,代理。

  組合即是在新的類(lèi)里面放上已經(jīng)定義的類(lèi)的對象,然后通過(guò)調用它的方法來(lái)實(shí)現自己的功能。

  繼承是通過(guò)extends關(guān)鍵詞繼承某一父類(lèi),這樣就能訪(fǎng)問(wèn)父類(lèi)的所有public方法(因此為了繼承,一般的規則是將父類(lèi)的所有數據成員都指定為private,將所有的方法都指定為public)。子類(lèi)的初始化需要注意的是,(當創(chuàng )建了一個(gè)子類(lèi)的對象時(shí),該對象包含一個(gè)基類(lèi)的子對象)java會(huì )在子類(lèi)的構造器中插入對基類(lèi)默認構造器的調用。但是如果沒(méi)有默認的基類(lèi)構造器,或者想調用一個(gè)帶參數的基類(lèi)構造器,就必須用關(guān)鍵詞super顯式地編寫(xiě)調用基類(lèi)構造器的語(yǔ)句,并且配上適當的參數列表。

  代理很有意思,(我們姑且使用導出類(lèi)和基類(lèi)這樣的字眼,但要清楚我們不是在討論繼承里面的關(guān)鍵詞)在導出類(lèi)里保存一個(gè)基類(lèi)的對象,然后用自己的方法對該基類(lèi)的種種方法進(jìn)行包裝。

  如何決定使用哪種方法復用類(lèi)呢?is-a就繼承,has-a就用組合。而且,組合比繼承總體上使用更廣泛、代價(jià)更小。

  向上轉型

  這個(gè)就牛逼了,第八章,第九章,第十章都與此密切相關(guān)?赐瓯緯(shū)之后印象最深的就是向上轉型了。

  使用final的原因有很多種,一定要弄清楚為什么使用final,是由于設計還是效率。

  final作用于數據的時(shí)候:final作用在基本對象比如int上,該值就成為不可改變的,一旦被初始化就無(wú)法再被更改,但是作用在普通的對象引用的時(shí)候,final使引用恒定不變,但是引用指向的對象是可變的。編譯器需要我們確保final對象一定要被初始化,我們可以通過(guò)在構造器中初始化他們,以達到相對自由的效果(稱(chēng)為空白final,我認為這個(gè)名字容易讓人誤解)。java允許在參數列表中以聲明的方式將參數指明為final,這一特性主要用來(lái)向匿名內部類(lèi)傳遞數據(這很重要)。

  final作用于方法的.時(shí)候,說(shuō)明作者想保持該方法在繼承的過(guò)程中不被改變,并且不被覆蓋。同時(shí),被final修飾的方法會(huì )被關(guān)閉“動(dòng)態(tài)綁定”,這樣編譯器就會(huì )為final方法調用生成“有限”有效的代碼。之所以說(shuō)有限,是因為隨著(zhù)編譯器的牛逼,它生成的代碼越來(lái)越有效。

  final作用于類(lèi)的時(shí)候,即是作者聲明對該類(lèi)的設計不允許任何繼承。

  學(xué)習得更深入一些,可能對以下事實(shí)感到有興趣:java中所有的事物都是對象,每個(gè)類(lèi)的編譯代碼都存在于電腦中的文件夾里(文件夾的層次根據反轉域名得到),該文件只有在需要使用程序代碼時(shí)才被加載。具體的說(shuō),就是“類(lèi)在其任何static成員函數(包括構造函數)被訪(fǎng)問(wèn)時(shí)加載”。

  第八章 多態(tài)

  多態(tài)的重要基本原理就是向上轉型:繼承允許將對象視為它自己本身的類(lèi)型或其基類(lèi)型加以處處理。

  將一個(gè)方法調用和一個(gè)方法主題關(guān)聯(lián)起來(lái)稱(chēng)為綁定,java中所有的方法都是后期綁定(除了static方法和final方法),所以我們可以編寫(xiě)只與基類(lèi)打交道的程序代碼,并且這些代碼對所有的導出類(lèi)都可以正確運行。

  (為什么static不動(dòng)態(tài)綁定:因為static方法的主要用法就是用類(lèi)名.方法名這樣的方式來(lái)調用,不存在“發(fā)送消息給某個(gè)對象,讓對象判斷自己怎么做”這樣的情況。

  為什么final不動(dòng)態(tài)綁定:這是早期final的一種用法,由程序員指定某方法為final,意味著(zhù)程序員明了動(dòng)態(tài)綁定的機制,并且聲明該方法不需要動(dòng)態(tài)綁定,這樣可以獲得更好的性能。這種用法已經(jīng)很少使用了。)

  初始化的時(shí)候,導出類(lèi)的構造函數會(huì )自動(dòng)調用基類(lèi)的默認構造函數,此過(guò)程一直遞歸到最基本的基類(lèi)。如果需要調用有參數的構造函數就需要手動(dòng)執行。反過(guò)來(lái),如果需要進(jìn)行清理工作(大部分時(shí)候我們都不需要),務(wù)必手動(dòng)執行基類(lèi)的清理工作先。比如繼承鏈的每個(gè)類(lèi)都實(shí)現dispose()方法,那么執行某個(gè)類(lèi)的清理工作的時(shí)候,需要手動(dòng)調用super.dispose()。不過(guò)此種情況下,務(wù)必在執行super.dispose()之前釋放成員對象,清理順序與執行順序是相反的。

  此外,構造器方面有更加復雜的調用機制,我們不用理它,只需要知道一條有效的準則“用盡可能簡(jiǎn)單的方法使對象進(jìn)入正常狀態(tài),如果可以的話(huà)避免調用其它方法”。

  java編譯器能夠允許向上多態(tài),就是因為java的機制能保存對象的類(lèi)型信息,即rtti,正因為這種機制,java編譯器也允許向下轉型,以獲得擴展類(lèi)的“擴展出”的方法。(另,擴展類(lèi)“擴展”了方法的這種繼承不是“純繼承”,這樣做好不好?用戶(hù)自己度量)。向下轉型失敗的話(huà)會(huì )拋出一個(gè)classcastexception。

  雖然這一章都是在講多態(tài),但是多態(tài)并不總是解決問(wèn)題最好的方案,它有可能使事情不必要地復雜起來(lái),我們應該總是優(yōu)先考慮更加靈活的組合。

  第九章 接口

  一種專(zhuān)門(mén)提供“接口”的類(lèi)叫抽象類(lèi),若含有至少一個(gè)abstract方法,該類(lèi)就必須被聲明為abstract的。抽象方法沒(méi)有方法體,派生類(lèi)必須實(shí)現它,否則派生類(lèi)也必須被生命為抽象的。

  interface關(guān)鍵詞使抽象的概念更進(jìn)了一步:1.這個(gè)“類(lèi)”完全抽象。2.一個(gè)類(lèi)可以向上轉型為多種interface。要讓一個(gè)類(lèi)遵循某個(gè)特定接口,需要使用implement關(guān)鍵字。

  在這一章中出現了“策略設計模式”這個(gè)詞。創(chuàng )建一個(gè)能夠根據所傳遞的參數對象的不同而具有不同行為的方法,被稱(chēng)為策略設計模式。

  策略設計模式跟適配器設計模式聯(lián)合使用可以提供非常強大的功能,比如我們遇到了無(wú)法更改的類(lèi)(別人編寫(xiě)的),想要它滿(mǎn)足我們的接口然后放到設計模式里面去(當然滿(mǎn)足了接口之后的用法就不止如此了),就可以編寫(xiě)一個(gè)適配器,包裝該類(lèi)同時(shí)產(chǎn)生我所需要的接口。

  使用抽象類(lèi)和接口的兩個(gè)原因是:1.在多重繼承關(guān)系中(這真的很常見(jiàn),看看java api就知道了),導出類(lèi)可以被向上轉型為每一個(gè)接口。2.防止客戶(hù)端程序員創(chuàng )建該類(lèi)的對象。那么我們該使用抽象類(lèi)還是接口呢?事實(shí)上,如果知道某事物應該成為一個(gè)基類(lèi),那么第一選擇應該是使它成為一個(gè)接口。

  接口之間的繼承能夠形成很好的體系,更像我們的現實(shí)生活。但是要特別注意的是,在不同接口中使用相同的方法名通常會(huì )造成代碼可讀性的混亂,令人不快。

  工廠(chǎng)方法設計模式是又一個(gè)重要的設計模式。我們在代碼中增加額外的間接性,一個(gè)重要的原因是想要創(chuàng )建框架。

【《java編程思想》讀書(shū)筆記】相關(guān)文章:

Java編程開(kāi)發(fā)簡(jiǎn)介08-17

Java基本編程技巧11-16

關(guān)于JAVA的XML編程10-08

關(guān)于java面向對象編程10-05

Java編程常見(jiàn)問(wèn)題匯總08-22

Java中的動(dòng)態(tài)代碼編程08-15

java網(wǎng)絡(luò )編程基本知識08-09

Java編程中如何實(shí)現中文排序09-27

JAVA編程面試題及答案09-16

java面向對象編程題庫及答案11-14

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频