《Thinking in Java》紀(jì)要

第一章 對(duì)象導(dǎo)論

1.1抽象過程

所有編程語言都是在提供對(duì)問題的抽象。匯編語言是對(duì)底層機(jī)器的抽象;命令式語言(如c)更加高級(jí),但是它們的抽象仍舊基于計(jì)算機(jī)的結(jié)構(gòu);面向?qū)ο筇峁┝吮硎尽皢栴}空間”元素的能力,可以基于問題進(jìn)行抽象,而不是計(jì)算機(jī)。

面向?qū)ο蟮奶攸c(diǎn):

  1. 萬物皆為對(duì)象
  2. 程序是對(duì)象的集合,它們通過發(fā)送消息告知彼此所要做的(即java中方法)。
  3. 每個(gè)對(duì)象都有由其他對(duì)象所構(gòu)成的存儲(chǔ)(即java中成員變量)。
  4. 每個(gè)對(duì)象都擁有其類型(即java中class)。
  5. 某一個(gè)特定類型的對(duì)象可以接受同樣的消息(即同class)。

1.2 每個(gè)對(duì)象都有一個(gè)接口

類是描述具有相同特性和行為的對(duì)象集合。面向?qū)ο缶幊痰倪^程,是為問題空間的元素和解空間的元素創(chuàng)建一一映射。
基于對(duì)象的特點(diǎn)來說
接口確定了某一個(gè)對(duì)象可以發(fā)送的請(qǐng)求,或者可以說成某一個(gè)對(duì)象具有的行為。

1.3 每個(gè)對(duì)象都提供服務(wù)

基于設(shè)計(jì)者的角度來說
將對(duì)象看作“服務(wù)提供者”。設(shè)計(jì)程序的過程,即考慮怎樣創(chuàng)建提供理想服務(wù)的一系列對(duì)象。

1.4 被隱藏的具體實(shí)現(xiàn)

一個(gè)完整的程序(如點(diǎn)餐)可能需要基于多套服務(wù)(如定位,圖片加載框架等)。
在設(shè)計(jì)類的時(shí)候,要從一個(gè)服務(wù)提供者的角度,考慮哪些接口是需要對(duì)外暴露的,哪些是需要隱藏的。

1.5 復(fù)用具體實(shí)現(xiàn)

代碼復(fù)用方式

  1. 組合
  2. 聚合(動(dòng)態(tài)發(fā)生的組合)
  3. 繼承

組合比繼承更靈活

1.6 繼承

導(dǎo)出類和基類具有相同接口,導(dǎo)出類可以新增接口,也可以覆蓋(override)基類的接口。

1.7 多態(tài)

實(shí)現(xiàn)方式:后期綁定

1.8 單根繼承結(jié)構(gòu)

1.9 容器

  1. 不同容器提供不同接口和外部行為;
  2. 不同容器對(duì)于某些操作具有不同效率。

1.9.1 參數(shù)化類型

泛型

1.10 對(duì)象的創(chuàng)建和生命期

垃圾回收機(jī)制

1.11 異常處理:處理錯(cuò)誤

1.12并發(fā)編程

第二章 一切都是對(duì)象

  1. 引用
  2. new

存儲(chǔ)到哪里
1). 寄存器
2). 堆棧 - 對(duì)象引用和基本類型存在堆棧中。java編譯器需要知道堆>棧中所有元素的生命周期。
3). 堆 - 對(duì)象實(shí)體存在堆中
4). 常量池
5). 磁盤存儲(chǔ)

  1. 基本類型
    boolean char byte short int long float double void
    BigInteger
    BingDecimal
  2. 數(shù)組
    基本類型數(shù)組
    引用類型數(shù)組
  3. 作用域
  4. 創(chuàng)建新的數(shù)據(jù)類型: 類
    成員變量和方法
    成員變量默認(rèn)值
    “局部變量”沒有默認(rèn)值
  5. 方法,參數(shù)和返回值
    參數(shù)列表
  6. import
  7. static
  8. 編譯和運(yùn)行
  9. 注釋
    @see等

第三章 操作符

  1. 操作符
    +,-,*,/,== ,=
  2. 優(yōu)先級(jí)
  3. 賦值
    引用賦值
  4. i++,++i
  5. == 比較的是對(duì)象的引用,覆蓋equals
  6. &&,||是短路操作符
  7. 直接常量
    十六進(jìn)制:0x
    八進(jìn)制:0
    float:F
    long;L
    指數(shù)計(jì)數(shù):e
  8. 按位操作符 & | ~ ^
  9. 移位操作符 >>, << ,>>> ,<<<
  10. 三元操作符 ?:
  11. 字符串操作符 + +=
  12. java中的位數(shù)溢出

第四章 控制執(zhí)行流程

第五章 初始化與清理

  1. 構(gòu)造器
  2. 重載
  3. 默認(rèn)構(gòu)造器
  4. this關(guān)鍵字
  5. 清理 finalize()
    finalize的一個(gè)用法:回收對(duì)象前檢查狀態(tài),拋出異常

常見垃圾回收機(jī)制

  1. 引用計(jì)數(shù) - 缺陷:循環(huán)引用;
  2. "活對(duì)象查找存留" - 自適應(yīng)“停止-復(fù)制” + “標(biāo)記-清掃” + “分代”
    從堆棧和靜態(tài)存儲(chǔ)區(qū)出發(fā),遍歷引用,找到存活的對(duì)象;
  1. 初始化

初始化順序
1). 查找 .class文件
2). 加載.class(創(chuàng)建class對(duì)象),進(jìn)行靜態(tài)初始化
3). 用new創(chuàng)建對(duì)象時(shí),在堆上為對(duì)象分配足夠的空間
4). 將分配的空間清零,初始化成員變量為默認(rèn)值
5). 初始化基類非靜態(tài)部分
6). 按照申明順序初始化成員變量
7). 非靜態(tài)代碼塊
8). 構(gòu)造器

第六章 訪問權(quán)限控制

第七章 復(fù)用類

  1. 方式:組合,繼承
  2. final關(guān)鍵字的作用

第八章 多態(tài)

  1. 后期綁定
  2. 用多態(tài)進(jìn)行程序設(shè)計(jì)

第九章 接口

  1. 接口多實(shí)現(xiàn)(同名方法)
  2. 策略模式
  3. 嵌套接口

第十章 內(nèi)部類

  1. 內(nèi)部類持有外部類引用
  2. .this和.new
  3. 靜態(tài)內(nèi)部類->嵌套類
  4. 為什么需要內(nèi)部類
    多繼承
    語法上沒有is-a的歧義
  5. 閉包
    閉包是一個(gè)可調(diào)用的對(duì)象,記錄類創(chuàng)建它的作用域的一些信息。
    內(nèi)部類是面向?qū)ο蟮拈]包。
  6. 內(nèi)部類的繼承
    導(dǎo)出類的構(gòu)造器攜帶參數(shù)外部類enclosingClassReference
    必須在導(dǎo)出類構(gòu)造器中調(diào)用enclosingClassReference.super()

第十一章 持有對(duì)象

  1. Collection,Map
  2. ArrayList,LinkedList
  3. TreeSet(紅黑樹),HashSet(散列),LinkedHashSet(散列+鏈表)
  4. TreeMap,HashMap,LinkedHashMap
  5. Stack,Queue,PriorityQueue

第十二章 異常處理

  1. 將“描述正常執(zhí)行過程中做什么事”和“發(fā)生問題怎么辦”的代碼隔離開。
  2. try-catch-finally
  3. 編譯時(shí)異常,Error,RuntimeException
  4. 異常鏈,嵌套異常
  5. 覆寫方法時(shí)候,只能拋出基類方法申明的異常
  6. 構(gòu)造器中發(fā)生異常,finally不一定起作用

第十三章 字符串

  1. String是不可變的對(duì)象
  2. +低效的原因:創(chuàng)建多個(gè)StringBuilder
  3. StringBuilder(非線程安全),StringBuffer(線程安全)
  4. Formatter
  5. 正則表達(dá)式
    java正則表達(dá)式的轉(zhuǎn)義使用\,特殊字符表示也使用\,例如:

通常,\d表示數(shù)字,正則中\\d 匹配一位數(shù)字
通常,\\表示\,正則中\\\\ 匹配反斜線\
正則中換行\n\t不需要兩個(gè)反斜線
(-|\\+)? 表示以一個(gè)加號(hào)或者減號(hào)開頭

量詞

貪婪型 所有量詞
非貪婪型 量詞后加問號(hào)
占有型(java特有) 量詞后加加號(hào)

貪婪型 貪婪 占有
X? X?? X?+
X* X*? X*+
X+ X+? X++

X通常需要用圓括號(hào)擴(kuò)起來

第十四章 類型信息

  1. RTTI:Run-Time Type Information
  2. Class對(duì)象
  3. 類加載器
  4. instance of
  5. 反射
  6. 動(dòng)態(tài)代理 InvocatoinHandler

第十五章 泛型

  1. 定義泛型類,泛型方法
  2. 泛型擦除
  3. 在泛型代碼內(nèi)部,無法獲得任何有關(guān)泛型參數(shù)類型的信息
  4. 泛型類型只在靜態(tài)類型檢查期間出現(xiàn),之后被替換為非泛型上界
  5. 不能是實(shí)例化具有參數(shù)類型的數(shù)組
  6. 不能協(xié)變
  7. 通配符 <? extend T>
  8. 超類型通配符 <? super T>
  9. 無界通配符 <?>
  10. 指定上界(extend T)不能set->T;指定下界,get->obj
  11. 自限定類型
    Class SelfB<T extends SelfB<T>>

第十六章 數(shù)組

  1. 多維數(shù)組
  2. Arrays常用方法:
    deepEquals(), sort(), binarySearch(), fill()
    其他
    System.arraycopy()

第十七章 容器深入研究

  1. Collection/Map常用方法
  2. 數(shù)據(jù)結(jié)構(gòu)
容器 原理 特點(diǎn)
HashMap 散列表 無序,查找快
LinkedHashMap 散列,鏈表 有序( 插入/LRU),迭代快
TreeMap 紅黑樹 有序(指定順序)
  1. 散列碼和散列函數(shù)
    計(jì)算散列碼,散列碼將被映射為下標(biāo)(受容量和負(fù)載因子影響),Entry作為value,保存到數(shù)組中;為了解決散列沖突,數(shù)組中保存list(拉鏈法)
  2. 生成有意義的hashCode
  3. 負(fù)載因子 = size()/容量
  4. 持有引用
    SoftRefenence,WeakRefenence,PhantomRefenence

第十八章 I/O系統(tǒng)

第十九章 枚舉類型

  1. 定義枚舉
  2. 枚舉實(shí)際都繼承自java.lang.Enum
  3. values()方法是由編譯器添加的靜態(tài)方法
  4. 嵌套枚舉
  5. EnumSet,EnumMap
  6. Enum內(nèi)定義抽象方法,由具體枚舉實(shí)現(xiàn)
  7. 多路分發(fā)

第二十章 注解

  1. 定義注解
  2. 元注解
  • Target: 作用域
  • Retention: 生命周期
  • Documented: 注解包含在javadoc中
  • Inherited: 允許子類繼承父類的注解
  1. 編寫注解處理器

第二十一章 并發(fā)

  1. “效率”,“阻塞”
  2. 定義Tread
  3. 共享資源
    所有對(duì)象自動(dòng)含有單一的鎖
    sychronized
    lock
    volatile
  4. 生命周期
    新建,就緒,阻塞,死亡
  5. 進(jìn)入阻塞狀態(tài)
  • sleep
  • wait
  • 阻塞式方法(io)
  • 等待鎖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,564評(píng)論 1 44
  • 314159
    小酌2016閱讀 168評(píng)論 0 0
  • 坐在摩托后面,速度很快,因?yàn)槭乔宄刻焐擅闪?,四周昏暗冷清,氣溫如風(fēng)景一般。這輛摩托的誕生原因我爸的一個(gè)心血來潮,...
    里凱樂啊閱讀 284評(píng)論 0 2

友情鏈接更多精彩內(nèi)容