程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Thinking in Java 筆記

Thinking in Java 筆記

編輯:關於JAVA

Thinking in Java 筆記。本站提示廣大學習愛好者:(Thinking in Java 筆記)文章只能為提供參考,不一定能成為您想要的結果。以下是Thinking in Java 筆記正文


  大二就買了這本書,如今再看這本書,看到了一些以前沒看的細節,也有了不同的領會。本文運用第4版,整理每章的筆記心得。老外的書有個特點,他會破費少量的文字去論述一個概念,這比堆代碼強多了。

第 1 章 對象導論

1.1 籠統

  籠統是計算機最重要的概念之一。C 在處理問題時,次要是基於計算機的構造停止籠統,而不是基於所要處理的問題的構造。而 Java 則是針對問題停止建模,依據問題來描繪問題,順序可以經過添加一個新類型的對象使本身適用於某個特定問題,順序員不會受限於任何特定類型的問題。

  對象具有形態、行為和標識。地道的面向對象順序設計的根本特性:

  • 萬物皆為對象:對象可以存儲數據(形態),也能執行某些操作(行為)。實際上,可以抽取待處理問題中的任何概念化構建為對象。
  • 順序是對象的集合,它們經過發送音訊告知彼此所要做的:其實就是調用特定對象的辦法。
  • 每個對象都有自己和其他對象構成的存儲:經過現有對象生成新對象,承繼和組合。
  • 每個對象都擁有其類型:每個對象都是某個類的實例 。
  • 一類對象可以接納異樣的音訊:多態,子類可以替代父類完成某些調用。

1.2 類和對象

  每個對象都是某個類的實例,一個類實踐上就是一個籠統數據類型,它描繪了具有相反特性(成員)和行為(功用)的對象集合。順序員可以經過定義類來順應問題,而不是自願運用現有的用來表示機器中的存儲單元的數據類型。依據需求添加新類型擴展編程言語,零碎好像看待內置類型一樣驗證並管理它們。

  把對象看做是服務提供者益處:將問題分解為一系列對象的集合;進步對象的內聚性,每個對象都專注本職任務,就是高內聚性,還有個低耦合,解耦普通就用隊列完成;方便了解代碼和重用。

  面向對象的特點:封裝、承繼和多態。何為封裝?即隱藏對象的屬性和細節,僅對外地下接口,控制屬性的讀取和修正。訪問控制存在的緣由:隔離與提供的服務有關的局部;別離並維護接口和完成。Java 中有四種訪問權限,辨別是:

  • public:對任何人都可訪問 
  • private:只要類創立者和外部辦法可訪問
  • protected:與 private 相當,區別是子類可訪問
  • 默許訪問權限:同一包內的類可互相訪問,不同包好像 private 一樣

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 章 一切都是對象

2.1 對象

  Java 經過援用來操作對象,運用 new 創立對象。那麼對象被安頓在哪個中央呢?計算中有5個中央可以存儲數據,辨別是:

  • 存放器:位於CPU外部,最快的存儲區,依據需求停止分配,不能直接控制
  • 堆棧:位於RAM,運用堆棧指針上下挪動分配內存,速度僅次於存放器,Java對象不在此,但援用在這裡。Java零碎知道棧裡的元素確切生命周期
  • 堆:位於RAM,寄存一切的 Java 對象,分配內存比擬靈敏,但代價是慢
  • 常量存儲:常量值通常放在順序代碼外部,或許放在 ROM 只讀存儲器中
  • 非RAM存儲:如將對象序列化到磁盤上,或許存在數據庫中

2.2 根本類型

  根本類型存儲值,並置於堆棧中,高效。Java 中根本類型的大小是固定的,不隨硬件架構的變化而變化。根本類型如下:

  • char:16-bit,2字節,Unicode字符,0 ~ 2^16-1,Character
  • byte:8 bits,1字節,-128 ~ 127,Byte
  • short:16 bits,2字節,-2^15 ~ 2^15-1,Short
  • int:32 bits,4字節,-2^31 ~ 2^31-1,Integer
  • long:64 bits,8字節,-2^63 ~ 2^63-1,Long
  • float:32 bits,4字節,IEEE754,Float
  • double:64 bits,4字節,IEEE754,Double
  • boolean:true/false,Boolean
  • void:Void

  一切數值均有正負號,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如下:

  • @see:援用其他類,@see classname,@see fully-qualified-classnam#method-name
  • @author:作者信息
  • @version:版本信息
  • <pre>code</pre>:代碼
  • <ol><li>1<li>2</ol>:列表
第 3 章 操作符

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 位操作符和移位操作符

  位操作符:

  • 與(&):同為1,輸入為1
  • 或(|):有1,輸入為1
  • 異或(^):不全為1,輸入為1
  • 非(~):取反

  移位操作符,只能用來處置整數,char、byte、short移位時自動轉為int:

  • 左移(<<):低位補0,相當於乘以2^n,n為挪動位數
  • 右移(>>):運用符號位擴展,為正高位補0,為負高位補1,相當於除以2^n,n為挪動位數
  • 無符號右移(>>>):高位用0擴展

  在停止移位時,比方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,運算後果就正確了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved