Thinking in Java 筆記。本站提示廣大學習愛好者:(Thinking in Java 筆記)文章只能為提供參考,不一定能成為您想要的結果。以下是Thinking in Java 筆記正文
大二就買了這本書,如今再看這本書,看到了一些以前沒看的細節,也有了不同的領會。本文運用第4版,整理每章的筆記心得。老外的書有個特點,他會破費少量的文字去論述一個概念,這比堆代碼強多了。
1.1 籠統
籠統是計算機最重要的概念之一。C 在處理問題時,次要是基於計算機的構造停止籠統,而不是基於所要處理的問題的構造。而 Java 則是針對問題停止建模,依據問題來描繪問題,順序可以經過添加一個新類型的對象使本身適用於某個特定問題,順序員不會受限於任何特定類型的問題。
對象具有形態、行為和標識。地道的面向對象順序設計的根本特性:
1.2 類和對象
每個對象都是某個類的實例,一個類實踐上就是一個籠統數據類型,它描繪了具有相反特性(成員)和行為(功用)的對象集合。順序員可以經過定義類來順應問題,而不是自願運用現有的用來表示機器中的存儲單元的數據類型。依據需求添加新類型擴展編程言語,零碎好像看待內置類型一樣驗證並管理它們。
把對象看做是服務提供者益處:將問題分解為一系列對象的集合;進步對象的內聚性,每個對象都專注本職任務,就是高內聚性,還有個低耦合,解耦普通就用隊列完成;方便了解代碼和重用。
面向對象的特點:封裝、承繼和多態。何為封裝?即隱藏對象的屬性和細節,僅對外地下接口,控制屬性的讀取和修正。訪問控制存在的緣由:隔離與提供的服務有關的局部;別離並維護接口和完成。Java 中有四種訪問權限,辨別是:
1.3 代碼復用
兩種方式,組合和承繼,組合靈敏性比擬高,相比於承繼耦合度低一些。假如要運用某個類提供的服務功用時,普通用組合,當要是運用類提供的接口時運用承繼。
承繼,運用現有的類創立新類型。子類擁有父類的成員(public, protected)並且復制了父類的接口,也就是說,子類與父類具有相反的類型。子類有兩種方式改動自己的行為:添加新辦法和掩蓋父類的辦法。當添加新辦法時,假如一切子類都需求,就可以把它抽取到父類中。
Java 中,Object是一切類的直接或直接父類。單根承繼的益處有:一切對象具有共用接口,利於向後兼容;一切對象都具有某些功用,易於創立和參數傳遞;易於渣滓回收。
1.6 多態
既然父類和子類是相反類型,那麼在運轉時子類就能交換父類(向上轉型)來完成不同的功用,這就是多態。多態的表現是:辦法的重載和掩蓋。編譯器(靜態分發,重載)和運轉零碎(JVM靜態分發,掩蓋)會處置相關細節,保證順序正確的行為。
1.7 容器和泛型
容器,就是Java中的數據構造了,不同的容器提供不同的接口和行為,關於某些操作具有不同的效率。在JDK 5 之前容器存儲的對象是Obejct,存儲對象必需向上轉型,會喪失其身份,當取出時需求向下轉型,能夠會出錯,由於不知道之前放出來的是什麼類型的對象,因而,JDK5添加了泛型,明白指出容器可接納的對象類型。
1.8 對象的創立和生命周期、異常和並發
Java 運用靜態內存分配技術,運用關鍵詞 new 在堆上創立對象。運用渣滓回收器釋放對象占用的內存。
Java 內置了異常的處置,而且強迫運用。異常提供了一種從錯誤停止牢靠恢復的途徑。
並發控制好共享資源的訪問即可,Java提供了並發編程庫,有現成可用的並發數據構造。
1.9 Java與Internet
網絡編程會觸及到很多知識,TCP/IP,多線程,IO模型等,要寫出高功能的Java順序,還是要下大時間的,雖然大問題被JVM搞定了。
2.1 對象
Java 經過援用來操作對象,運用 new 創立對象。那麼對象被安頓在哪個中央呢?計算中有5個中央可以存儲數據,辨別是:
2.2 根本類型
根本類型存儲值,並置於堆棧中,高效。Java 中根本類型的大小是固定的,不隨硬件架構的變化而變化。根本類型如下:
一切數值均有正負號,JDK5的自動包裝功用,自動地將根本類型轉為包裝類型。
高精度數字:BigInteger:支持恣意精度的整數;BigDecimal:支持恣意精度的定點數。
數組也是對象,能存儲根本類型和援用類型,Java會確保數組被初始化。
2.3 作用域 scope
Java 運用花括號定義作用域,部分變量在花括號完畢時,生命周期就完畢了,而對象不是如此,它能不斷保管下去,Java經過渣滓回收器管理對象的內存。普通不會呈現內存走漏,但也不是相對的。
2.4 類,字段,辦法
運用 class 關鍵字定義一個類,類擁有字段(成員變量)和辦法,關於成員變量,即便沒停止初始化,Java也會保證它有一個默許值,援用類型默許為null,數字都默許為0,布爾默許false,char默許’\u0000’(null)。關於部分變量編譯器會強迫停止初始化。
辦法,辦法名和參數合起來稱為辦法簽名,關於參數,在Java中只要值傳遞。Java消弭了向前援用的問題,也就是同一個類中,成員變量和辦法的先後順序可以隨意。
static關鍵字可用來修飾字段,辦法和類。修飾字段辦法:表示屬於類,不必新建對象就可運用。普通是修飾外部類,此類與普通的類沒有差異。
2.5 正文
常用標簽和html如下:
3.1 優先級&賦值運算符
從左到右先乘除後加減,當不確定時,運用括號明白標識即可。
賦值運算符(=),對根本類型賦值就是把一個中央的內容復制到另一個中央,比方int a=b,就是把b的內容復制給a;對對象賦值只是使這個變量也指向該對象,比方String s = a,s和a指向同一個對象。將對象傳給辦法時,也只是傳遞一個援用的值,或許說傳遞一個對象的別名。
3.2 算術、關系、邏輯運算符,直接常量
加減乘除,取模,一元加、減操作符,自增,自減。
== 作用於根本類型,比擬值能否相等;作用於對象比擬能否是同一個援用,比擬對象運用equals,默許的equals比擬援用,需求重寫。
與(&&)、或(||)、非(!)生成一個布爾值,具有短路功用,即假如第一個表達式能確定整個表達式的後果,那麼就不會運算前面的表達式。
直接常量,必需明白通知編譯器常量類型,比方10F,10D,10L,0xFF。關於char、byte、short超越其最大范圍自動轉為int。
指數計數法:float a = 1.39E-43F;表示1.39×e^-43,假如不加F編譯器默許會當做double處置,會提示類型轉換。
3.3 位操作符和移位操作符
位操作符:
移位操作符,只能用來處置整數,char、byte、short移位時自動轉為int:
在停止移位時,比方int只要數值右端的低5位才有用,比方 16>>2 和 16>>34 相等,由於2^5=32,相當於對32取模。long類型就是低6位數字無效。
這裡多說兩句,源碼中或停止移位時會常常看到(&0xFF),緣由是什麼呢?
普通我們會對字節byte停止操作,首先 0xFF 表示低8位(1字節),當對byte移位操作時,會自動轉成int,而Java中 int類型有32位,並且在計算機中數字運用有符號的二進制補碼表示。所以byte轉為int時會停止符號擴展,高位以符號位填充。假如byte為負數那麼其補碼與原碼相反,此時進不停止位與操作都無所謂,但是為正數時不同,比方byte a = -4;其轉為int在外部的表示就是11111111111111111111111111111100,這停止運算顯然是不正確的,無效位只要低八位,所以與0xFF位與運算,把高24地位0,運算後果就正確了。