Kotlin 從小白到大牛
內容描述
本書是一部系統論述Kotlin編程語言、
面向對象編程方法以及函數式編程思想的立體化教程
(含紙質圖書、電子書、教學課件、源代碼與視頻教程)。全書共分為5篇:第1篇Kotlin基礎(第1章~第10章),
第2篇面向對象(第11章~第13章),
第3篇函數式編程(第14章~第17章),
第4篇Kotlin進階(第18章~第27章),
第5篇項目實戰(第28章~第29章)。
主要內容包括:開篇綜述;開發環境搭建;第一個Kotlin程序;Kotlin語法基礎;
Kotlin編碼規範;數據類型;字符串;
運算符;程序流程控制;
函數;面向對象編程;繼承與多態;
抽象類與接口;函數式編程基石——高階函數和Lambda表達式;泛型;
數據容器——數組和集合;
Kotlin中函數式編程API;異常處理;線程;協程;
Kotlin與Java混合編程; Kotlin I/O與文件管理;網絡編程;
Kotlin與Java Swing圖形用戶界面編程;輕量級SQL框架——Exposed;反射;註解。
最後給出了兩個項目設計案例,項目實戰1:開發PetStore寵物商店項目;
項目實戰2:開發Kotlin版QQ2006聊天工具。
為便於讀者快速掌握Kotlin編程方法,本書作者精心製作了電子書、完整的教學課件、完整的源代碼與豐富的配套視頻教程,並提供在線答疑服務。
目錄大綱
推薦序1
前言3
配套資源說明6
學習路線圖7
內容說明9
第1篇Kotlin基礎
本篇視頻:454分鐘
第1章開篇綜述2
本章視頻:33分鐘
1.1 Kotlin語言簡介2
1.1.1 Kotlin語言歷史2
1.1.2 Kotlin語言設計目標2
1.2 Kotlin語言特點3
1.3 Kotlin與Java虛擬機4
1.3.1 Java虛擬機4
1.3.2 Kotlin應用程序運行過程5
1.4如何獲得幫助5
第2章開發環境搭建8
本章視頻:25分鐘
2.1 JDK工具包8
2.1.1 JDK下載和安裝8
2.1.2設置環境變量10
2.2 IntelliJ IDEA開發工具12
2.3 Eclipse開發工具13
2.3.1 Eclipse下載和安裝13
2.3.2安裝Kotlin插件17
2.4 Kotlin編譯器18
2.4.1下載Kotlin編譯器18
2.4.2設置Kotlin編譯器環境變量19
2.5文本編輯工具20
2.5.1在Sublime Text中安裝Kotlin語言包20
2.5.2 Sublime Text與Kotlin編譯器集成21
第3章第一個Kotlin程序25
本章視頻:22分鐘
3.1使用REPL實現25
3.2使用IntelliJ IDEA實現26
3.2.1創建項目26
3.2.2創建Kotlin源代碼文件28
3.2.3編寫代碼29
3.2.4運行程序30
3.3使用IntelliJ IDEA與Gradle實現30
3.4使用Eclipse與Kotlin插件實現33
3.4.1創建項目33
3.4.2創建Kotlin源代碼文件34
3.4.3運行程序35
3.5使用文本編輯工具與Kotlin編譯器實現37
3.5.1編寫代碼37
3.5.2編譯程序37
3.5.3運行程序39
3.6代碼解釋39
第4章Kotlin語法基礎41
本章視頻:52分鐘
4.1標識符和關鍵字41
4.1.1標識符41
4.1.2關鍵字42
4.2變量和常量43
4.2.1變量43
4.2.2常量和只讀變量44
4.2.3使用var還是val 45
4.3註釋46
4.4語句與表達式47
4.4.1語句48
4.4.2表達式48
4.5包49
4.5.1包的作用49
4.5.2包的定義50
4.5.3包的引入51
第5章Kotlin編碼規範53
本章視頻:49分鐘
5.1命名規範53
5.2註釋規範55
5.2.1文件註釋55
5.2.2文檔註釋55
5.2.3代碼註釋58
5.2 .4使用地標註釋59
5.3聲明60
5.3.1變量或常量聲明60
5.3.2類聲明61
5.4代碼排版62
5.4.1空行62
5.4.2空格64
5.4.3縮進65
5.4.4斷行65
5.5省略規範66
第6章數據類型68
本章視頻:45分鐘
6.1回顧Java數據類型68
6.2 Kotlin基本數據類型69
6.2.1整型類型70
6.2.2浮點類型71
6.2.3字符類型72
6.2.4布爾類型74
6.3數值類型之間的轉換75
6.3.1賦值與顯式轉換75
6.3.2數學計算與隱式轉換77
6.4可空類型77
6.4.1可空類型概念78
6.4.2使用安全調用運算符(?.) 78
6.4.3非空斷言運算符(!!) 79
6.4.4使用Elvis運算符(?:) 80
第7章字符串82
本章視頻:93分鐘
7.1字符串字面量82
7.1.1普通字符串82
7.1.2原始字符串83
7.2不可變字符串85
7.2.1 String 85
7.2.2字符串拼接86
7.2.3字符串模板87
7.2.4字符串查找89
7.2.5字符串比較91
7.2.6字符串截取93
7.3可變字符串94
7.3.1 StringBuilder 94
7.3.2字符串追加、插入、刪除和替換95
7.4正則表達式97
7.4.1 Regex類97
7.4.2字符串匹配98
7.4.3字符串查找99
7.4.4字符串替換99
7.4.5字符串分割100
第8章運算符102
本章視頻:51分鐘
8.1算術運算符102
8.1.1一元運算符102
8.1.2二元運算符103
8.1.3算術賦值運算符104
8.2關係運算符105
8.3邏輯運算符107
8.4位運算符108
8.5其他運算符111
8.6運算符優先級111
第9章程序流程控制113
本章視頻:47分鐘
9.1 if分支結構113
9.1.1 if結構當作語句使用113
9.1 .2 if表達式115
9.2 when多分支結構117
9.2.1 when結構當作語句使用118
9.2.2 when表達式119
9.3循環結構121
9.3.1 while語句121
9.3.2 do-while語句122
9.3.3 for語句122
9.4跳轉語句124
9.4.1 break語句124
9.4.2 continue語句126
9.5使用區間128
9.5.1表示區間128
9.5.2使用in和!in關鍵字129
第10章函數131
本章視頻:37分鐘
10.1函數聲明131
10.2返回特殊數據132
10.2.1無返回數據與Unit類型132
10.2.2永遠不會正常返回數據與Nothing類型133
10.3函數參數134
10.3.1使用命名參數調用函數134
10.3.2參數默認值135
10.3.3可變參數136
10.4表達式函數體137
10.5局部函數137
10.6匿名函數138
第2篇面向對象
本篇視頻:360分鐘
第11章面向對象編程142
本章視頻:246分鐘
11.1面向對象概述142
11.2面向對象的三個基本特性143
11.2.1封裝性143
11.2.2繼承性143
11.2.3多態性144
11.3類聲明144
11.4屬性146
11.4.1回顧JavaBean 146
11.4.2聲明屬性147
11.4.3延遲初始化屬性150
11.4.4委託屬性151
11.4.5惰性加載屬性152
11.4.6可觀察屬性153
11.5擴展154
11.5.1擴展函數155
11.5.2擴展屬性156
11.5.3 “成員優先”原則157
11.5.4定義中綴運算符159
11.6構造函數160
11.6.1主構造函數160
11.6.2次構造函數162
11.6.3默認構造函數163
11.7封裝性與可見性修飾符164
11.7.1可見性範圍164
11.7.2公有可見性166
11.7.3內部可見性167
11.7.4保護可見性167
11.7.5私有可見性168
11.8數據類169
11.8.1聲明數據類170
11.8.2使用copy函數171
11.8.3解構數據類172
11.9枚舉類172
11.9.1聲明枚舉類172
11.9.2枚舉類構造函數174
11.9 .3枚舉常用屬性和函數175
11.10嵌套類176
11.10.1嵌套類176
11.10.2內部類178
11.11強大的object關鍵字180
11.11.1對象表達式180
11.11.2對象聲明182
11.11.3伴生對象184
第12章繼承與多態188
本章視頻:78分鐘
12.1 Kotlin中的繼承188
12.2調用父類構造函數190
12.2.1使用主構造函數191
12.2.2使用次構造函數重載192
12.2.3使用參數默認值調用構造函數193
12.3重寫成員屬性和函數194
12.3.1重寫成員屬性194
12.3.2重寫成員函數195
12.4多態197
12.4.1多態概念197
12.4.2使用is和!is進行類型檢查199
12.4.3使用as和as?進行類型轉換202
12.5密封類203
第13章抽像類與接口206
本章視頻:36分鐘
13.1抽像類206
13.1.1抽像類概念206
13.1.2抽像類聲明和實現206
13.2使用接口209
13.2.1接口概念209
13.2.2接口聲明和實現209
13.2.3接口與多繼承212
13.2.4接口繼承213
13.2.5接口中的具體函數和屬性214
第3篇函數式編程
本篇視頻:302分鐘
第14章函數式編程基石——高階函數和Lambda表達式218
本章視頻:91分鐘
14.1函數式編程簡介218
14.2高階函數218
14.2.1函數類型219
14.2.2函數字面量220
14.2.3函數作為另一個函數返回值使用221
14.2.4函數作為參數使用222
14.3 Lambda表達式223
14.3.1 Lambda表達式標準語法格式223
14.3.2使用Lambda表達式225
14.3.3 Lambda表達式簡化寫法225
14.3.4 Lambda表達式與return語句228
14.4閉包與捕獲變量229
14.5內聯函數232
14.5.1自定義內聯函數232
14.5.2使用let函數233
14.5. 3使用with和apply函數233
第15章泛型236
本章視頻:51分鐘
15.1泛型函數236
15.1.1聲明泛型函數236
15.1.2多類型參數237
15.1.3泛型約束237
15.1.4可空類型參數238
15.2泛型屬性239
15.3泛型類240
15.4泛型接口242
第16章數據容器——數組和集合245
本章視頻:81分鐘
16.1數組245
16.1.1對像數組245
16.1.2基本數據類型數組248
16.2集合概述249
16.3 Set集合250
16.3.1不可變Set集合250
16.3.2可變Set集合252
16.4 List集合254
16.4.1不可變List集合255
16.4.2可變List集合256
16.5 Map集合258
16.5.1不可變Map集合259
16.5 .2可變Map集合261
第17章Kotlin中函數式編程API 264
本章視頻:79分鐘
17.1函數式編程API與鍊式調用264
17.2遍歷操作265
17.2.1 forEach 265
17.2.2 forEachIndexed 266
17.3三大基礎函數267
17.3.1 filter 267
17.3.2 map 268
17.3.3 reduce 269
17.4聚合函數270
17.5過濾函數272
17.6映射函數273
17.7排序函數275
17.8案例:求階乘276
17.9案例:計算水仙花數277
第4篇Kotlin進階
本篇視頻:744分鐘
第18章異常處理280
本章視頻:67分鐘
18.1從一個問題開始280
18.2異常類繼承層次281
18.2.1 Throwable類281
18.2.2 Error和Exception 283
18.3捕獲異常283
18.3.1 try-catch語句284
18.3.2 try-catch表達式285
18.3.3多catch代碼塊286
18.3 .4 try-catch語句嵌套288
18.4釋放資源289
18.4.1 finally代碼塊290
18.4.2自動資源管理293
18.5 throw與顯式拋出異常294
第19章線程297
本章視頻:49分鐘
19.1基礎知識297
19.1.1進程297
19.1.2線程297
19.1.3主線程298
19.2創建線程299
19.3線程狀態301
19.4線程管理302
19.4.1等待線程結束302
19.4.2線程讓步304
19.4.3線程停止305
第20章協程308
本章視頻:57分鐘
20.1協程介紹308
20.2創建協程308
20.2.1 Kotlin協程API 308
20.2.2創建支持kotlinx.coroutines的項目309
20.2.3第一個協程程序310
20.2.4 launch函數與Job對象311
20.2.5 runBlocking函數313
20.2.6掛起函數314
20.3協程生命週期316
20.4管理協程317
20.4.1等待協程結束317
20.4.2超時設置318
20.4.3取消協程320
第21章Kotlin與Java混合編程322
本章視頻:77分鐘
21.1數據類型映射322
21.1.1 Java基本數據類型與Kotlin數據類型映射322
21.1.2 Java包裝類與Kotlin數據類型映射322
21.1.3 Java常用類與Kotlin數據類型映射323
21.1.4 Java集合類型與Kotlin數據類型映射323
21.2 Kotlin調用Java 324
21.2.1避免Kotlin關鍵字324
21.2.2平台類型與空值325
21.2.3異常檢查327
21.2.4調用Java函數式接口327
21.3 Java調用Kotlin 328
21.3.1訪問Kotlin屬性329
21.3 .2訪問包級別成員329
21.3.3實例字段、靜態字段和靜態函數330
21.3.4可見性334
21.3.5生成重載函數336
21.3.6異常檢查338
第22章Kotlin I/O與文件管理340
本章視頻:49分鐘
22.1 Java I/O流概述340
22.1.1 Java流設計理念340
22.1.2 Java流類繼承層次341
22.2字節流343
22.2.1 InputStream抽像類344
22.2.2 OutputStream抽像類344
22.2 .3案例:文件複製345
22.3字符流346
22.3.1 Reader抽像類346
22.3.2 Writer抽像類346
22.3.3案例:文件複製347
22.4文件管理348
22.4.1 File類擴展函數348
22.4.2案例:讀取目錄文件349
第23章網絡編程351
本章視頻:115分鐘
23.1網絡基礎351
23.1.1網絡結構351
23.1.2 TCP/IP協議352
23.1.3 IP地址352
23.1.4端口353
23.2 TCP Socket低層次網絡編程353
23.2.1 TCP Socket通信概述353
23.2.2 TCP Socket通信過程353
23.2.3 Socket類354
23.2.4 ServerSocket類356
23.2.5案例:文件上傳工具356
23.3 UDP Socket低層次網絡編程358
23.3.1 DatagramSocket類358
23.3.2 DatagramPacket類359
23.3.3案例:文件上傳工具360
23.4數據交換格式362
23.4.1 JSON文檔結構363
23.4.2使用第三方JSON庫365
23.4.3 JSON數據編碼和解碼366
23.5訪問互聯網資源368
23.5.1 URL的概念368
23.5.2 HTTP/HTTPS協議369
23.5.3使用URL類369
23.5.4使用HttpURLConnection發送GET請求370
23.5.5使用HttpURLConnection發送POST請求372
23.5.6實例:Downloader 373
第24章Kotlin與Java Swing圖形用戶界面編程375
本章視頻:182分鐘
24.1 Java圖形用戶界面技術375
24.2 Swing技術基礎376
24.2.1 Swing類層次結構377
24.2.2 Swing程序結構378
24.3事件處理模型381
24.3.1內部類和對象表達式處理事件382
24.3.2 Lambda表達式處理事件384
24.3.3使用適配器385
24.4佈局管理387
24.4.1 FlowLayout佈局387
24.4.2 BorderLayout佈局389
24.4.3 GridLayout佈局391
24.4.4不使用佈局管理器393
24.5 Swing組件395
24.5.1標籤和按鈕395
24.5.2文本輸入組件398
24.5.3複選框和單選按鈕401
24.5.4下拉列表404
24.5.5列表406
24.5.6分隔面板407
24.5.7使用表格409
24.6案例:圖書庫存413
第25章輕量級SQL框架—— Exposed 418
本章視頻:91分鐘
25.1 MySQL數據庫管理系統418
25.1.1數據庫安裝與配置418
25.1 .2連接MySQL服務器422
25.1.3常見的管理命令425
25.2 Kotlin與DSL語言429
25.3使用Exposed框架430
25.3.1配置項目430
25.3.2面向DSL API 431
25.3.3面向對象API 434
25.4案例:多表連接查詢操作436
25.4.1創建數據庫437
25.4.2配置SQL日誌438
25.4.3實現查詢438
第26章反射442
本章視頻:34分鐘
26.1 Kotlin反射API 442
26.2引用類443
26.3調用函數445
26.4調用構造函數446
26.5調用屬性448
第27章註解451
本章視頻:23分鐘
27.1元註解451
27.2自定義註解453
27.2.1聲明註解453
27.2.2案例:使用元註解454
27.2.3註解目標聲明456
27.2.4案例:讀取運行時註解信息457
第5篇項目實戰
本篇視頻:621分鐘
第28章項目實戰1:開發PetStore寵物商店項目460
本章視頻:309分鐘
28.1系統分析與設計460
28.1.1項目概述460
28.1.2需求分析461
28.1.3原型設計461
28.1.4數據庫設計463
28.1.5架構設計465
28.1 .6系統設計466
28.2任務1:創建數據庫467
28.2.1迭代1.1:安裝和配置MySQL數據庫467
28.2.2迭代1.2:編寫數據庫DDL腳本467
28.2.3迭代1.3:插入初始數據到數據庫468
28.3任務2 :初始化項目469
28.3.1迭代2.1:配置項目469
28.3.2迭代2.2:添加資源圖片470
28.3.3迭代2.3:添加包471
28.4任務3:編寫數據持久層代碼471
28.4.1迭代3.1:編寫實體類471
28.4.2迭代3.2:創建數據表類474
28.4.3迭代3.3:編寫DAO類475
28.5任務4:編寫表示層代碼483
28.5.1迭代4.1:編寫啟動類483
28.5.2迭代4.2:編寫自定義窗口類——MyFrame 483
28.5.3迭代4.3:用戶登錄窗口485
28.5.4迭代4.4:商品列表窗口487
28.5.5迭代4.5:商品購物車窗口495
28.6任務5:應用程序打包發布503
28.6.1迭代5.1:處理TODO和FIXME任務503
28.6.2迭代5.2:打包503
第29章項目實戰2:開發Kotlin版QQ2006聊天工具507
本章視頻:312分鐘
29.1系統分析與設計507
29.1.1項目概述507
29.1.2需求分析508
29.1.3原型設計509
29.1.4數據庫設計509
29.1.5網絡拓撲圖512
29.1.6系統設計512
29.2任務1:創建服務器端數據庫513
29.2.1迭代1.1:安裝和配置MySQL數據庫513
29.2.2迭代1.2:編寫數據庫DDL腳本514
29.2. 3迭代1.3:插入初始數據到數據庫514
29.3任務2:初始化項目515
29.3.1任務2.1:配置項目515
29.3.2任務2.2:添加資源圖片516
29.3.3任務2.3:添加包517
29.4任務3:編寫服務器端外圍代碼517
29.4.1任務3.1:創建數據表類517
29.4 .2任務3.2:編寫UserDAO類518
29.4.3任務3.3:編寫ClientInfo類521
29.5任務4:客戶端UI實現521
29.5.1迭代4.1:登錄窗口實現521
29.5.2迭代4.2:好友列表窗口實現525
29.5 .3迭代4.3:聊天窗口實現529
29.6任務5:用戶登錄過程實現533
29.6.1迭代5.1:客戶端啟動533
29.6.2迭代5.2:客戶端登錄編程535
29.6.3迭代5.3:服務器啟動538
29.6. 4迭代5.4:服務器驗證編程539
29.7任務6:刷新好友列表541
29.7.1迭代6.1:刷新好友列表服務器端編程542
29.7.2迭代6.2:刷新好友列表客戶端編程543
29.8任務7:聊天過程實現547
29.8.1迭代7.1:客戶端用戶1向用戶3發送消息548
29.8.2迭代7.2:服務器接收用戶1消息與轉發給用戶3消息549
29.8.3迭代7.3:客戶端用戶3接收用戶1消息551
29.9任務8:用戶下線552
29.9.1迭代8.1:客戶端編程553
29.9.2迭代8.2:服務器端編程554
作者介紹
作者:關東昇
關東昇,一個在IT領域摸爬滾打20多年的老程序員、培訓師、作者。精通多種IT技術。
參與設計和開發北京市公交一卡通大型項目,開發國家農產品追溯系統、金融系統微博等移動客戶端項目,並在App Store發布多款遊戲和應用軟件。
近期為中國移動、中國聯通、南方航空、中石油、工商銀行、平安銀行和天津港務局等企事業單位授課。
著有《iOS開髮指南》《從零開始學Swift》《Android網絡遊戲開發實戰》《Cocos2d-x實戰》系列和《JSP網絡程序設計》等40多本計算機書籍。