Java編程的邏輯

Java編程的邏輯

《Java編程的邏輯》是2018年機械工業出版社出版的圖書,作者是馬俊昌。

基本介紹

  • 書名:Java編程的邏輯
  • 作者:馬俊昌
  • ISBN:9787111587729
  • 類別:計算機與網際網路
  • 頁數:675
  • 定價:99
  • 出版社:機械工業出版社
  • 出版時間:2018-01-01
  • 裝幀:平裝
  • 開本:16開
內容簡介,作者簡介,目錄,

內容簡介

Java專家撰寫,力求透徹講解每個知識點,逐步建立編程知識圖譜。本書以Java語言為例,由基礎概念入手,到背後實現原理與邏輯,再到套用實踐,融會貫通。
全書共六大部分,其要點如下。
第一部分(第1~2章)講解電腦程式的基本執行流程與元素,以及數據背後的二進制表示,幫讀者掌握編程的基本概念。
第二部分(第3~7章)講解面向對象的編程原理與邏輯,涉及類、繼承與多態、接口與抽象類、異常與常用基礎類,讓讀者透徹了解Java的重要基礎——面向對象。
第三部分(第8~12章)介紹泛型與容器及其數據結構和算法,涵蓋泛型、列表和佇列、各種Map和Set、堆與優先權佇列等。
第四部分(第13~14章)介紹檔案處理。涵蓋檔案的基本概念、二進制檔案和位元組流、文本檔案和字元流、檔案和目錄操作,以及檔案處理的一些高級技術,包括常見檔案類型的處理、隨機讀寫檔案、記憶體映射檔案、標準序列化機制,以及Jackson序列化。
第五部分(第15~20章)介紹並發,包括執行緒的傳統基礎知識和Java並發包。傳統基礎知識包括執行緒的基本概念與基本的同步、協作和中斷機制;Java並發包涵蓋原子變數、顯式鎖、顯式條件、並發容器、異步任務執行服務、同步和協作工具類。
第六部分(第21~26章)介紹動態和聲明式編程編程思路、API與技巧,涵蓋反射、註解、動態代理、類載入機制、正則表達式、Java 8引入的函式式編程等。
這本書和別的書有什麼不同?
簡單來說,其他書大多教你怎么用,而這本書幫助你透徹理解,從基本概念到高層框架,剖析實現原理與JDK原始碼,融合專業理論與套用實踐,使你透徹理解Java編程的實現原理和思維邏輯,融會貫通。具體來說:
1)對於每個編程概念,不僅介紹了語法和用法,還分析了為什麼要有這個概念,實現原理是什麼,背後的思維邏輯是什麼;
2)對於Java的主要API(如Java基礎類、各種容器類、檔案、並發包等),不僅介紹了用法、示例和套用,還剖析了大量JDK原始碼,解釋了其內部實現機制;
3)對於實踐中常用的系統程式和框架,如鍵值資料庫、訊息佇列、序列化框架、DI(依賴注入)容器、AOP(面向切面編程)框架、熱部署、模板引擎等,本書利用基本API演示了其基本實現原理;
4)本書不僅注重實現原理,同樣重視實用性,介紹了很多實踐中常用的技術,包含了不少實際開發中積累的經驗和教訓,使讀者可以少走一些彎路;
5)本書雖然是Java語言描述,但以更為通用的編程邏輯為主,融入了很多通用的編程相關知識,如二進制、編碼、數據結構和算法、設計模式、作業系統、編程思維等;
6)本書高度注重表述,盡力站在讀者的角度,循序漸進、簡潔透徹、通俗易懂。

作者簡介

馬俊昌,鄰家科技CTO和聯合創始人。北京理工大學博士,曾就職於IBM,從事中間件、雲計算架構和開發工作,在萬普世紀負責移動廣告平台大數據分析和算法最佳化工作。2014年聯合創立鄰家科技,主要產品“到位APP”是一個到家生活服務平台。十多年來,一直從事Java編程,積累了比較豐富的經驗。平時喜歡讀書,研究技術與創新,樂於分享編程心得。

目錄

Contents 目錄
讀者評論
前言
第一部分 編程基礎與二進制
第1章 編程基礎2
1.1 數據類型和變數3
1.2 賦值4
1.2.1 基本類型4
1.2.2 數組類型6
1.3 基本運算8
1.3.1 算術運算8
1.3.2 比較運算10
1.3.3 邏輯運算10
1.3.4 小結11
1.4 條件執行11
1.4.1 語法和陷阱11
1.4.2 實現原理14
1.5 循環16
1.5.1 循環的4種形式16
1.5.2 循環控制19
1.5.3 實現原理20
1.5.4 小結20
1.6 函式的用法21
1.6.1 基本概念21
1.6.2 進一步理解函式23
1.6.3 小結27
1.7 函式調用的基本原理27
1.7.1 棧的概念27
1.7.2 函式執行的基本原理28
1.7.3 數組和對象的記憶體分配29
1.7.4 遞歸調用的原理30
1.7.5 小結31
第2章 理解數據背後的二進制33
2.1 整數的二進制表示與位運算33
2.1.1 正整數的二進制表示33
2.1.2 負整數的二進制表示34
2.1.3 十六進制35
2.1.4 位運算36
2.2 小數的二進制表示37
2.2.1 小數計算為什麼會出錯37
2.2.2 二進制表示38
2.3 字元的編碼與亂碼39
2.3.1 常見非Unicode編碼39
2.3.2 Unicode編碼42
2.3.3 編碼轉換44
2.3.4 亂碼的原因45
2.3.5 從亂碼中恢復46
2.4 char的真正含義49
第二部分 面向對象
第3章 類的基礎52
3.1 類的基本概念52
3.1.1 函式容器52
3.1.2 自定義數據類型53
3.1.3 定義第一個類55
3.1.4 使用第一個類55
3.1.5 變數默認值57
3.1.6 private變數57
3.1.7 構造方法58
3.1.8 類和對象的生命周期60
3.1.9 小結61
3.2 類的組合61
3.2.1 String和Date61
3.2.2 圖形類62
3.2.3 用類描述電商概念63
3.2.4 用類描述人之間的血緣關係65
3.2.5 目錄和檔案66
3.2.6 一些說明67
3.2.7 小結68
3.3 代碼的組織機制68
3.3.1 包的概念68
3.3.2 jar包71
3.3.3 程式的編譯與連結71
3.3.4 小結72
第4章 類的繼承73
4.1 基本概念73
4.1.1 根父類Object74
4.1.2 方法重寫74
4.1.3 圖形類繼承體系75
4.1.4 小結80
4.2 繼承的細節80
4.2.1 構造方法81
4.2.2 重名與靜態綁定82
4.2.3 重載和重寫83
4.2.4 父子類型轉換85
4.2.5 繼承訪問許可權protected85
4.2.6 可見性重寫86
4.2.7 防止繼承final87
4.3 繼承實現的基本原理88
4.3.1 示例88
4.3.2 類載入過程90
4.3.3 對象創建的過程91
4.3.4 方法調用的過程92
4.3.5 變數訪問的過程93
4.4 為什麼說繼承是把雙刃劍94
4.4.1 繼承破壞封裝94
4.4.2 封裝是如何被破壞的94
4.4.3 繼承沒有反映is-a關係97
4.4.4 如何應對繼承的雙面性97
第5章 類的擴展100
5.1 接口的本質100
5.1.1 接口的概念101
5.1.2 定義接口101
5.1.3 實現接口102
5.1.4 使用接口103
5.1.5 接口的細節105
5.1.6 使用接口替代繼承106
5.1.7 Java 8和Java 9對接口的增強106
5.1.8 小結108
5.2 抽象類108
5.2.1 抽象方法和抽象類108
5.2.2 為什麼需要抽象類109
5.2.3 抽象類和接口109
5.2.4 小結110
5.3 內部類的本質111
5.3.1 靜態內部類111
5.3.2 成員內部類113
5.3.3 方法內部類115
5.3.4 匿名內部類117
5.4 枚舉的本質119
5.4.1 基礎120
5.4.2 典型場景122
第6章 異常125
6.1 初識異常125
6.1.1 NullPointerException(空指針異常)125
6.1.2 NumberFormatException(數字格式異常)126
6.2 異常類128
6.2.1 Throwable128
6.2.2 異常類體系129
6.2.3 自定義異常130
6.3 異常處理131
6.3.1 catch匹配131
6.3.2 重新拋出異常131
6.3.3 finally132
6.3.4 try-with-resources133
6.3.5 throws134
6.3.6 對比受檢和未受檢異常135
6.4 如何使用異常135
6.4.1 異常應該且僅用於異常情況136
6.4.2 異常處理的目標136
6.4.3 異常處理的一般邏輯137
第7章 常用基礎類138
7.1 包裝類138
7.1.1 基本用法139
7.1.2 共同點140
7.1.3 剖析Integer與二進制算法144
7.1.4 剖析Character149
7.2 剖析String155
7.2.1 基本用法156
7.2.2 走進String內部157
7.2.3 編碼轉換157
7.2.4 不可變性158
7.2.5 常量字元串159
7.2.6 hashCode160
7.2.7 正則表達式161
7.3 剖析StringBuilder162
7.3.1 基本用法162
7.3.2 基本實現原理162
7.3.3 String的+和+ =運算符165
7.4 剖析Arrays166
7.4.1 用法166
7.4.2 多維數組171
7.4.3 實現原理172
7.4.4 小結174
7.5 剖析日期和時間174
7.5.1 基本概念174
7.5.2 日期和時間API175
7.5.3 局限性182
7.6 隨機183
7.6.1 Math.random183
7.6.2 Random184
7.6.3 隨機的基本原理185
7.6.4 隨機密碼187
7.6.5 洗牌189
7.6.6 帶權重的隨機選擇189
7.6.7 搶紅包算法191
7.6.8 北京購車搖號算法192
7.6.9 小結193
第三部分 泛型與容器
第8章 泛型196
8.1 基本概念和原理196
8.1.1 一個簡單泛型類197
8.1.2 容器類199
8.1.3 泛型方法201
8.1.4 泛型接口202
8.1.5 類型參數的限定202
8.1.6 小結205
8.2 解析通配符205
8.2.1 更簡潔的參數類型限定205
8.2.2 理解通配符206
8.2.3 超類型通配符208
8.2.4 通配符比較211
8.3 細節和局限性211
8.3.1 使用泛型類、方法和接口211
8.3.2 定義泛型類、方法和接口213
8.3.3 泛型與數組214
8.3.4 小結217
第9章 列表和佇列218
9.1 剖析ArrayList218
9.1.1 基本用法218
9.1.2 基本原理219
9.1.3 疊代221
9.1.4 ArrayList實現的接口225
9.1.5 ArrayList的其他方法227
9.1.6 ArrayList特點分析229
9.1.7 小結229
9.2 剖析LinkedList229
9.2.1 用法230
9.2.2 實現原理232
9.2.3 LinkedList特點分析238
9.3 剖析ArrayDeque239
9.3.1 實現原理239
9.3.2 ArrayDeque特點分析244
第10章 Map和Set245
10.1 剖析HashMap245
10.1.1 Map接口245
10.1.2 HashMap247
10.1.3 實現原理247
10.1.4 小結256
10.2 剖析HashSet256
10.2.1 用法256
10.2.2 實現原理258
10.2.3 小結259
10.3 排序二叉樹260
10.3.1 基本概念260
10.3.2 基本算法261
10.3.3 平衡的排序二叉樹263
10.3.4 小結264
10.4 剖析TreeMap264
10.4.1 基本用法265
10.4.2 實現原理267
10.4.3 小結273
10.5 剖析TreeSet274
10.5.1 基本用法274
10.5.2 實現原理275
10.5.3 小結276
10.6 剖析LinkedHashMap276
10.6.1 基本用法276
10.6.2 實現原理279
10.6.3 LinkedHashSet282
10.6.4 小結282
10.7 剖析EnumMap283
10.7.1 基本用法283
10.7.2 實現原理285
10.7.3 小結287
10.8 剖析EnumSet287
10.8.1 基本用法287
10.8.2 套用場景288
10.8.3 實現原理291
10.8.4 小結294
第11章 堆與優先權佇列295
11.1 堆的概念與算法296
11.1.1 基本概念296
11.1.2 堆的算法298
11.1.3 小結302
11.2 剖析PriorityQueue302
11.2.1 基本用法302
11.2.2 實現原理304
11.2.3 小結309
11.3 堆和PriorityQueue的套用309
11.3.1 求前K個最大的元素309
11.3.2 求中值311
11.3.3 小結314
第12章 通用容器類和總結315
12.1 抽象容器類315
12.1.1 AbstractCollection316
12.1.2 AbstractList319
12.1.3 AbstractSequentialList321
12.1.4 AbstractMap323
12.1.5 AbstractSet325
12.1.6 AbstractQueue325
12.1.7 小結326
12.2 Collections326
12.2.1 查找和替換327
12.2.2 排序和調整順序329
12.2.3 添加和修改332
12.2.4 適配器333
12.2.5 裝飾器338
12.2.6 小結342
12.3 容器類總結342
12.3.1 用法和特點342
12.3.2 數據結構和算法344
12.3.3 設計思維和模式344
第四部分 檔案
第13章 檔案基本技術348
13.1 檔案概述348
13.1.1 基本概念和常識348
13.1.2 Java檔案概述352
13.2 二進制檔案和位元組流355
13.2.1 InputStream/OutputStream355
13.2.2 FileInputStream/File-OutputStream357
13.2.3 ByteArrayInputStream/ByteArrayOutputStream359
13.2.4 DataInputStream/Data-OutputStream361
13.2.5 BufferedInputStream/BufferedOutputStream363
13.2.6 實用方法364
13.2.7 小結365
13.3 文本檔案和字元流365
13.3.1 基本概念366
13.3.2 Reader/Writer368
13.3.3 InputStreamReader/Output-StreamWriter368
13.3.4 FileReader/FileWriter369
13.3.5 CharArrayReader/Char-ArrayWriter370
13.3.6 StringReader/StringWriter370
13.3.7 BufferedReader/Buffered-Writer371
13.3.8 PrintWriter372
13.3.9 Scanner374
13.3.10 標準流374
13.3.11 實用方法376
13.3.12 小結377
13.4 檔案和目錄操作378
13.4.1 構造方法378
13.4.2 檔案元數據378
13.4.3 檔案操作379
13.4.4 目錄操作380
第14章 檔案高級技術383
14.1 常見檔案類型處理384
14.1.1 屬性檔案384
14.1.2 CSV檔案385
14.1.3 Excel388
14.1.4 HTML389
14.1.5 壓縮檔案391
14.2 隨機讀寫檔案394
14.2.1 用法394
14.2.2 設計一個鍵值資料庫BasicDB396
14.2.3 BasicDB的實現397
14.2.4 小結401
14.3 記憶體映射檔案402
14.3.1 基本概念402
14.3.2 用法403
14.3.3 設計一個訊息佇列BasicQueue404
14.3.4 實現訊息佇列406
14.3.5 小結409
14.4 標準序列化機制409
14.4.1 基本用法409
14.4.2 複雜對象411
14.4.3 定製序列化411
14.4.4 序列化的基本原理413
14.4.5 版本問題414
14.4.6 序列化特點分析414
14.5 使用Jackson序列化為JSON/XML/MessagePack415
14.5.1 基本概念415
14.5.2 基本用法415
14.5.3 容器對象418
14.5.4 複雜對象419
14.5.5 定製序列化420
14.5.6 Jackson對XML支持的局限性428
14.5.7 小結428
第五部分 並發
第15章 並發基礎知識430
15.1 執行緒的基本概念430
15.1.1 創建執行緒430
15.1.2 執行緒的基本屬性和方法432
15.1.3 共享記憶體及可能存在的問題435
15.1.4 執行緒的優點及成本438
15.2 理解synchronized439
15.2.1 用法和基本原理439
15.2.2 進一步理解synchronized443
15.2.3 同步容器及其注意事項445
15.3 執行緒的基本協作機制450
15.3.1 協作的場景450
15.3.2 wait/notify450
15.3.3 生產者/消費者模式453
15.3.4 同時開始455
15.3.5 等待結束456
15.3.6 異步結果458
15.3.7 集合點461
15.3.8 小結462
15.4 執行緒的中斷463
15.4.1 取消/關閉的場景463
15.4.2 取消/關閉的機制463
15.4.3 執行緒對中斷的反應464
15.4.4 如何正確地取消/關閉執行緒467
15.4.5 小結467
第16章 並發包的基石468
16.1 原子變數和CAS468
16.2 顯式鎖473
16.3 顯式條件483
第17章 並發容器490
17.1 寫時複製的List和Set490
17.2 ConcurrentHashMap493
17.3 基於跳表的Map和Set498
17.4 並發佇列501
第18章 異步任務執行服務505
18.1 基本概念和原理505
18.2 執行緒池513
18.3 定時任務的那些陷阱518
第19章 同步和協作工具類527
19.1 讀寫鎖ReentrantReadWrite-Lock527
19.2 信號量Semaphore529
19.3 倒計時門栓CountDownLatch531
19.4 循環柵欄CyclicBarrier533
19.5 理解ThreadLocal535
第20章 並發總結541
20.1 執行緒安全的機制541
20.2 執行緒的協作機制543
20.3 容器類544
20.4 任務執行服務546
第六部分 動態與函式式編程
第21章 反射550
21.1 Class類551
21.2 套用示例559
21.3 反射與泛型561
第22章 註解564
22.1 內置註解564
22.2 框架和庫的註解566
22.3 創建註解568
22.4 查看註解信息570
22.5 註解的套用:定製序列化571
22.6 註解的套用:DI容器573
第23章 動態代理577
23.1 靜態代理577
23.2 Java SDK動態代理579
23.3 cglib動態代理584
23.4 Java SDK代理與cglib代理比較585
23.5 動態代理的套用:AOP585
第24章 類載入機制592
24.1 類載入的基本機制和過程593
24.2 理解ClassLoader594
24.3 類載入的套用:可配置的策略597
24.4 自定義ClassLoader598
24.5 自定義ClassLoader的套用:熱部署599
第25章 正則表達式603
25.1 語法603
25.2 Java API612
25.3 模板引擎618
25.4 剖析常見表達式619
第26章 函式式編程628
26.1 Lambda表達式628
26.2 函式式數據處理:基本用法637
26.3 函式式數據處理:強大方便的收集器647
26.4 組合式異步編程658
26.5 Java 8的日期和時間API668

相關詞條

熱門詞條

聯絡我們