本書分為四大部分:第1~6章,初步認識Java的基礎語法及主流編程工具的使用;第7~11章,詳解Java面向對象編程語言的語法、核心編程思想、基礎API等;第12~17章,介紹使用Java進行高級應用開發(fā)所需的API和基礎原理;第18、19章,介紹了Java8~Java17版本的新特性。本書核心內容基于目前企業(yè)應用最主流的Java8進行講解,讀者可以直接進階到最近的長期支持版本Java17。本書遵循深入淺出的原則編寫,既有生動活潑的生活化案例講解,又有干貨滿滿的源碼級分析,可以讓讀者輕松領會Java技術精髓,快速掌握Java開發(fā)技能。本書為每一個知識點的講解都配備了案例,代碼量龐大,如果讀者跟隨本書案例練習會大大提升自身的代碼編寫能力。本書配套名師視頻教程,讀者在學習過程中可結合視頻學習,讓你的Java進階之路事半功倍,為后續(xù)的技術提升打下堅實的基礎。 本書適合初學Java編程語言的自學者、編程愛好者學習,還適合各類院校計算機相關專業(yè)的師生作為教材或教輔資料使用,是Java編程語言入門的必備圖書。
尚硅谷教育是一家專業(yè)的IT教育培訓機構,開設了JavaEE、大數(shù)據(jù)、HTML5前端等多門學科,在互聯(lián)網(wǎng)上發(fā)布的JavaEE、大數(shù)據(jù)、HTML5前端、區(qū)塊鏈、C語言、Python等技術視頻教程廣受贊譽。
第1章 Java語言概述 1
1.1 Java語言的發(fā)展簡史 1
1.2 Java語言的發(fā)展前景 3
1.3 Java語言的技術體系平臺 4
1.4 Java語言的特點 4
1.5 Java語言的核心機制之JVM 6
1.6 Java語言的開發(fā)環(huán)境和運行環(huán)境 7
1.7 本章小結 8
第2章 第一個Java程序:HelloWorld 9
2.1 開發(fā)的前期準備 9
2.1.1 JDK的下載 9
2.1.2 JDK的安裝 10
2.1.3 JDK的目錄介紹 12
2.1.4 配置環(huán)境變量 12
2.2 第一個Java程序 17
2.2.1 Java程序開發(fā)步驟 17
2.2.2 第一個Java程序的剖析 19
2.2.3 幾個初學者易犯的錯誤 19
2.3 Java注釋 23
2.3.1 單行注釋 23
2.3.2 多行注釋 23
2.3.3 文檔注釋 24
2.4 文本編輯器的介紹 25
2.4.1 下載與安裝 25
2.4.2 語言環(huán)境設置 25
2.4.3 開發(fā)Java程序 26
2.4.4 字符編碼設置 27
2.4.5 默認開發(fā)語言設置 29
2.5 案例:打印個人信息 30
2.6 本章小結 30
第3章 基礎語法 31
3.1 關鍵字和保留字 31
3.1.1 關鍵字 32
3.1.2 保留字 32
3.1.3 特殊值 32
3.2 標識符 33
3.2.1 標識符的命名規(guī)則 33
3.2.2 標識符的命名規(guī)范 33
3.2.3 案例:標識符辨析 33
3.3 變量 34
3.3.1 變量的聲明與使用 34
3.3.2 變量的注意事項 36
3.4 數(shù)據(jù)類型 37
3.4.1 計算機數(shù)據(jù)存儲方式 38
3.4.2 整型 39
3.4.3 浮點型 40
3.4.4 字符型 41
3.4.5 布爾型 43
3.4.6 案例:用變量保存?zhèn)人信息 43
3.5 數(shù)據(jù)類型的轉換 44
3.5.1 自動類型轉換 44
3.5.2 強制類型轉換 45
3.5.3 案例:基礎練習 46
3.6 運算符和標點符號 48
3.6.1 算術運算符 48
3.6.2 賦值運算符 53
3.6.3 比較運算符 54
3.6.4 邏輯運算符 55
3.6.5 位運算符 56
3.6.6 條件運算符 61
3.6.7 運算符的優(yōu)先級 61
3.6.8 標點符號 62
3.7 本章案例 62
3.7.1 案例:實現(xiàn)算術運算 62
3.7.2 案例:求一個三位數(shù)字各個
位數(shù)上的和 63
3.7.3 案例:交換兩個變量的值 63
3.7.4 案例:判斷某個年份是否是
閏年 64
3.7.5 案例:將小寫字母轉為對應
的大寫字母 64
3.8 本章小結 65
第4章 流程控制語句結構 66
4.1 順序結構 66
4.1.1 順序結構的特點 66
4.1.2 輸出語句 67
4.1.3 輸入語句 67
4.1.4 案例:從鍵盤中輸入個人
信息 69
4.2 分支結構之if…else 70
4.2.1 單分支條件判斷if 70
4.2.2 案例:2月份的總天數(shù) 71
4.2.3 雙分支條件判斷if…else 71
4.2.4 案例:平年、閏年 72
4.2.5 多分支條件判斷if…else if 72
4.2.6 案例:征婚 74
4.2.7 案例:解方程 75
4.3 分支結構之switch-case 76
4.3.1 分支結構switch-case 76
4.3.2 分支結構與條件判斷的區(qū)別 79
4.3.3 案例:判斷這一天是當年的
第幾天 80
4.4 循環(huán)結構 81
4.4.1 while語句 82
4.4.2 案例:趣味折紙 83
4.4.3 do…while語句 83
4.4.4 案例:猜數(shù)字 84
4.4.5 for語句 85
4.4.6 案例:水仙花數(shù) 86
4.4.7 三種循環(huán)語句的對比 87
4.4.8 嵌套循環(huán) 87
4.4.9 案例:九九乘法表 88
4.4.10 案例:完數(shù) 89
4.5 跳轉語句 89
4.5.1 break語句 90
4.5.2 continue語句 91
4.5.3 return語句 92
4.5.4 案例:素數(shù) 92
4.6 綜合案例 93
4.7 本章小結 95
第5章 數(shù)組 96
5.1 數(shù)組概述 96
5.2 一維數(shù)組 99
5.2.1 一維數(shù)組的聲明 99
5.2.2 一維數(shù)組的初始化 99
5.2.3 數(shù)組元素默認值 101
5.2.4 一維數(shù)組的遍歷 102
5.2.5 一維數(shù)組內存分析 103
5.2.6 案例:遍歷英文字母大小寫 103
5.2.7 案例:打魚還是曬網(wǎng) 104
5.3 數(shù)組的算法 105
5.3.1 元素特征值統(tǒng)計 105
5.3.2 最值查找 106
5.3.3 順序查找 106
5.3.4 二分查找 108
5.3.5 冒泡排序 110
5.3.6 快速排序 111
5.3.7 數(shù)組的復制 114
5.3.8 元素的反轉 116
5.4 動態(tài)數(shù)組的實現(xiàn) 118
5.4.1 數(shù)組元素的增加 118
5.4.2 數(shù)組元素的刪除 120
5.5 多維數(shù)組 122
5.5.1 多維數(shù)組的聲明 123
5.5.2 多維數(shù)組的初始化 123
5.5.3 案例:楊輝三角 125
5.5.4 案例:矩陣轉置 126
5.6 本章小結 127
第6章 開發(fā)工具IntelliJ IDEA 128
6.1 IntelliJ IDEA概述 128
6.2 下載與安裝 129
6.2.1 下載 129
6.2.2 安裝 130
6.3 初始化設置 133
6.4 快速創(chuàng)建并運行Java工程 134
6.5 詳細設置 137
6.5.1 字體大小設置 137
6.5.2 字符編碼設置 138
6.5.3 大小寫不敏感設置 138
6.5.4 自動導包 139
6.5.5 啟動退出設置 140
6.5.6 自動更新 141
6.6 快速開發(fā) 141
6.6.1 代碼模板 141
6.6.2 快捷鍵 142
6.7 多模塊的IDEA工程 144
6.8 本章小結 148
第7章 面向對象編程基礎 149
7.1 面向對象與面向過程 149
7.2 類與對象 150
7.2.1 類與對象的關系 150
7.2.2 類的聲明 150
7.2.3 對象的創(chuàng)建 152
7.3 類的成員之成員變量 153
7.3.1 成員變量的聲明 153
7.3.2 成員變量的訪問 154
7.3.3 成員變量默認值 155
7.3.4 對象的內存分析 156
7.3.5 成員變量與局部變量的區(qū)別 158
7.3.6 案例:商品類與對象 158
7.3.7 案例:銀行賬戶類與對象 159
7.4 類的成員之方法 160
7.4.1 方法的聲明 160
7.4.2 方法的調用 162
7.4.3 方法的傳參機制 163
7.4.4 案例:圓類方法設計與調用 167
7.4.5 案例:數(shù)組工具類方法設計
與調用 168
7.5 方法的重載 171
7.5.1 重載方法的聲明和調用 171
7.5.2 案例:求三角形面積 173
7.6 特殊參數(shù) 174
7.6.1 命令行參數(shù) 174
7.6.2 可變參數(shù) 176
7.6.3 案例:n個字符串拼接 177
7.7 方法的遞歸調用 178
7.7.1 遞歸調用 178
7.7.2 案例:猴子吃桃 179
7.7.3 案例:走臺階 180
7.8 對象數(shù)組的使用 181
7.8.1 對象數(shù)組 181
7.8.2 對象數(shù)組的內存分析 182
7.8.3 案例:員工信息管理 183
7.9 本章小結 184
第8章 面向對象編程進階 185
8.1 類的成員之構造器 185
8.1.1 構造器的聲明 185
8.1.2 構造器的使用 186
8.1.3 案例:矩形類構造器的設計 187
8.2 面向對象的基本特征之封裝性 188
8.2.1 封裝的體現(xiàn) 188
8.2.2 訪問權限修飾符 189
8.2.3 案例:矩形類的封裝 191
8.3 this關鍵字 192
8.3.1 this關鍵字的使用場景 193
8.3.2 案例:矩形類代碼的改進 195
8.3.3 案例:銀行賬戶類的改進 196
8.3.4 什么是JavaBean 198
8.4 包的使用 199
8.4.1 包的聲明 199
8.4.2 使用其他包的類 201
8.4.3 常用包介紹 202
8.4.4 案例:員工信息管理 203
8.5 面向對象的基本特征之繼承性 205
8.5.1 為什么需要繼承 206
8.5.2 如何實現(xiàn)類的繼承 207
8.5.3 類繼承性的特點 207
8.5.4 方法的重寫 213
8.5.5 super關鍵字 214
8.5.6 案例:員工和學生信息管理 216
8.6 面向對象基本特征之多態(tài)性 218
8.6.1 對象的多態(tài)性表現(xiàn) 218
8.6.2 多態(tài)性的應用 220
8.6.3 向上轉型與向下轉型 222
8.6.4 instanceof關鍵字 223
8.6.5 案例:圖形對象管理 224
8.6.6 企業(yè)面試題 228
8.7 類的成員之代碼塊 228
8.7.1 代碼塊的語法 229
8.7.2 類的初始化 229
8.7.3 案例:類初始化 230
8.7.4 對象的初始化 232
8.7.5 案例:對象初始化 234
8.7.6 企業(yè)面試題 236
8.8 本章小結 237
第9章 面向對象高級編程 238
9.1 final關鍵字 238
9.2 native關鍵字 240
9.3 abstract關鍵字 241
9.3.1 抽象方法 241
9.3.2 抽象類 241
9.3.3 案例:模板設計模式 244
9.3.4 案例:員工工資系統(tǒng) 246
9.4 接口 249
9.4.1 接口的好處 249
9.4.2 接口的聲明 250
9.4.3 接口的擴展與實現(xiàn) 251
9.4.4 Java 8對接口的改進 255
9.4.5 案例:排序接口Sortable 258
9.5 內部類 261
9.5.1 成員內部類 261
9.5.2 案例:汽車與發(fā)動機 264
9.5.3 局部內部類 265
9.5.4 匿名內部類 266
9.5.5 案例:排序接口Comparator 268
9.6 枚舉 270
9.6.1 使用class定義枚舉類 270
9.6.2 使用enum定義枚舉類 271
9.6.3 案例:星期枚舉類 273
9.7 注解 274
9.7.1 注解的使用 274
9.7.2 元注解 276
9.7.3 自定義注解 277
9.7.4 注解的新特性 278
9.8 案例:不可擴容與可擴容數(shù)組容器 280
9.9 本章小結 283
第10章 異常和異常處理 284
10.1 異常體系結構 284
10.1.1 什么是異常 284
10.1.2 異常的分類 284
10.1.3 常見的異常和錯誤類型 286
10.1.4 異常信息的查看 291
10.2 異常處理 292
10.2.1 try-catch-finally 292
10.2.2 案例:數(shù)組元素的查找 296
10.2.3 關鍵字:throws 298
10.2.4 案例:倒計時幾秒 300
10.2.5 關鍵字:throw 301
10.2.6 案例:取款和存款異常 303
10.2.7 Java 7對異常處理的改進 305
10.3 異常類型的擴展 306
10.3.1 自定義異常類型 306
10.3.2 案例:登錄異常 307
10.4 本章小結 308
第11章 常用類 309
11.1 Object類 309
11.1.1 toString方法 310
11.1.2 equals方法 311
11.1.3 hashCode方法 314
11.1.4 getClass方法 316
11.1.5 clone方法 317
11.1.6 finalize方法 318
11.2 包裝類 319
11.2.1 數(shù)值類型 319
11.2.2 Character類型 321
11.2.3 Boolean類型 322
11.2.4 裝箱與拆箱 322
11.2.5 案例:員工信息管理 323
11.2.6 案例:計算兩個整數(shù)的和 325
11.2.7 包裝類的緩存對象 325
11.3 String類 326
11.3.1 字符串的特點 326
11.3.2 字符串對象的內存分析 328
11.3.3 案例:企業(yè)面試題 329
11.3.4 String類的常見方法 331
11.3.5 案例:String算法考查 334
11.4 可變字符序列 336
11.4.1 可變字符序列的常用方法 336
11.4.2 字符串與可變字符序列的
區(qū)別 338
11.4.3 案例:字符串指定部分反轉 340
11.5 Arrays類 341
11.5.1 toString方法:轉換字符串 341
11.5.2 sort方法:自然排序 342
11.5.3 sort方法:定制排序 343
11.5.4 binarySearch方法:查找 345
11.5.5 copyOf方法:數(shù)組復制 345
11.5.6 equals方法:判斷數(shù)組的
元素是否相等 345
11.5.7 案例:左奇右偶 346
11.5.8 案例:動態(tài)數(shù)組 347
11.6 數(shù)學相關類 351
11.6.1 Math類 351
11.6.2 BigInteger類 352
11.6.3 BigDecimal類 353
11.6.4 Random類 353
11.6.5 案例:企業(yè)面試題 354
11.7 日期類 355
11.7.1 第一代日期類 355
11.7.2 第二代日期類 357
11.7.3 第三代日期類 357
11.8 本章小結 361
第12章 集合 362
12.1 集合概述 362
12.1.1 數(shù)組回顧 362
12.1.2 集合框架集 363
12.2 Collection集合 364
12.2.1 Collection集合的方法 364
12.2.2 案例:增加和刪除元素 365
12.2.3 foreach循環(huán)遍歷 367
12.2.4 Iterator迭代器遍歷 368
12.2.5 集合元素的刪除 370
12.2.6 案例:員工信息管理 371
12.3 List集合 373
12.3.1 List接口的方法 373
12.3.2 案例:元素的增刪改查 374
12.3.3 List接口的實現(xiàn)類 375
12.3.4 List集合的遍歷 379
12.3.5 案例:企業(yè)面試題 380
12.4 Set集合 382
12.4.1 HashSet和LinkedHashSet 382
12.4.2 案例:員工信息管理 382
12.4.3 TreeSet 384
12.4.4 案例:企業(yè)面試題 387
12.5 Map集合 388
12.5.1 Map接口的方法 388
12.5.2 Map集合的遍歷 389
12.5.3 Map接口的實現(xiàn)類 390
12.5.4 案例:企業(yè)面試題 392
12.6 深入源碼分析 394
12.6.1 Set的源碼分析 394
12.6.2 Iterator的源碼分析 395
12.6.3 ArrayList的源碼分析 395
12.6.4 LinkedList的源碼分析 396
12.6.5 HashMap的源碼分析 401
12.6.6 modCount變量 411
12.7 本章小結 411
第13章 泛型 412
13.1 泛型的概念 412
13.1.1 無泛型帶來的問題 412
13.1.2 泛型的引入 413
13.2 泛型類或泛型接口 415
13.2.1 泛型類或接口的聲明 416
13.2.2 泛型類或接口的使用 417
13.2.3 延續(xù)父類或接口的泛型 419
13.2.4 設定泛型的上限 419
13.2.5 案例:矩形對象管理 421
13.2.6 案例:員工信息管理 422
13.2.7 案例:隨機驗證碼 423
13.3 泛型方法 424
13.3.1 泛型方法的聲明 424
13.3.2 設定泛型形參的上限 426
13.3.3 案例:數(shù)組工具類 427
13.4 類型通配符 429
13.4.1 類型通配符的使用 429
13.4.2 類型通配符的上限 430
13.4.3 類型通配符的下限 431
13.4.4 泛型方法與類型通配符 432
13.5 泛型擦除 435
13.6 泛型嵌套 436
13.7 Collections工具類 438
13.8 案例:企業(yè)面試題 439
13.9 本章小結 440
第14章 IO流 441
14.1 File類 441
14.1.1 獲取文件或目錄信息 441
14.1.2 操作文件 443
14.1.3 操作目錄 445
14.1.4 案例:遞歸列出目錄的
下一級 447
14.1.5 案例:遞歸列出目錄下的
所有Java源文件 448
14.1.6 案例:遞歸刪除非空目錄 449
14.1.7 案例:獲取指定目錄的
總大小 450
14.2 IO流的分類和設計 451
14.2.1 IO流類的體系結構 451
14.2.2 常見IO流 452
14.2.3 抽象基類的常用方法 452
14.3 案例演示 454
14.3.1 輸出純文本數(shù)據(jù) 454
14.3.2 讀取純文本數(shù)據(jù) 455
14.3.3 按行讀取 456
14.3.4 復制文件基本版 456
14.3.5 復制文件提升效率版 457
14.3.6 讀寫純文本數(shù)據(jù)的同時進行
編碼和解碼 459
14.3.7 操作Java各種數(shù)據(jù)類型的
數(shù)據(jù) 461
14.3.8 保存對象 462
14.3.9 按行輸出文本內容 465
14.3.10 復制或剪切整個目錄 466
14.3.11 IO流使用步驟小結 467
14.4 System類與IO流 468
14.4.1 System類中的IO流 469
14.4.2 Scanner類與IO流 470
14.5 IO流的關閉問題 472
14.5.1 正確關閉IO流 472
14.5.2 新try…catch結構 474
14.6 本章小結 476
第15章 多線程 477
15.1 線程概述 477
15.1.1 進程 478
15.1.2 線程 478
15.2 線程的創(chuàng)建和啟動 479
15.2.1 繼承Thread類 479
15.2.2 實現(xiàn)Runnable接口 481
15.2.3 二者的區(qū)別 482
15.3 線程的生命周期 483
15.4 Thread類的方法 486
15.4.1 獲取和設置線程信息 486
15.4.2 線程的控制 488
15.4.3 案例:倒計時 488
15.4.4 案例:線程讓步 489
15.4.5 案例:龜兔賽跑 489
15.4.6 案例:守護線程 491
15.4.7 案例:停止線程 492
15.5 線程同步 494
15.5.1 線程安全問題 494
15.5.2 同步代碼塊 496
15.5.3 同步方法 498
15.5.4 釋放鎖與否的操作 500
15.5.5 死鎖 500
15.6 等待喚醒機制 502
15.6.1 案例:初級快餐店 502
15.6.2 案例:快餐店升級 504
15.6.3 案例:交替打印數(shù)字 507
15.7 單例設計模式 508
15.7.1 餓漢式 508
15.7.2 懶漢式 510
15.8 本章小結 512
第16章 網(wǎng)絡編程 513
16.1 網(wǎng)絡基礎知識 513
16.1.1 網(wǎng)絡的分類 513
16.1.2 網(wǎng)絡協(xié)議 514
16.1.3 IP地址 516
16.1.4 端口號 518
16.1.5 URL訪問互聯(lián)網(wǎng)資源 518
16.2 TCP Socket網(wǎng)絡編程 521
16.2.1 Socket介紹 522
16.2.2 基于TCP的網(wǎng)絡通信程序
結構 523
16.2.3 案例:一個客戶端與服務器
端的單次通信 524
16.2.4 案例:多個客戶端與服務器
端的多次通信 526
16.2.5 案例:多個客戶端上傳文件 529
16.2.6 案例:多個客戶端群聊 532
16.3 UDP Socket網(wǎng)絡編程 538
16.3.1 基于UDP的網(wǎng)絡編程 538
16.3.2 案例:用UDP發(fā)送消息 539
16.3.3 MulticastSocket多點廣播 540
16.3.4 案例:基于MulticastSocket
的群聊 541
16.4 本章小結 543
第17章 反射 544
17.1 類的加載、鏈接和初始化 544
17.1.1 類的加載 544
17.1.2 類的鏈接 544
17.1.3 類的初始化 545
17.2 類加載器 548
17.2.1 四種類加載器 549
17.2.2 雙親委托模型 549
17.2.3 自定義類加載器 550
17.2.4 加載資源文件 552
17.3 反射的根源 553
17.3.1 Class類剖析 553
17.3.2 獲取類信息 555
17.4 反射的應用 562
17.4.1 動態(tài)創(chuàng)建對象 562
17.4.2 動態(tài)操作屬性 563
17.4.3 動態(tài)調用方法 564
17.4.4 動態(tài)操作數(shù)組 565
17.5 代理設計模式 566
17.5.1 靜態(tài)代理模式 566
17.5.2 動態(tài)代理模式 568
17.6 本章小結 571
第18章 Lambda表達式與Stream API 572
18.1 Lambda表達式 573
18.1.1 Lambda表達式語法 573
18.1.2 案例:實現(xiàn)Comparator接口
574
18.1.3 類型推斷 574
18.1.4 Lambda表達式的簡化 575
18.2 函數(shù)式接口 575
18.2.1 函數(shù)式接口的概念 575
18.2.2 案例:消費型接口 577
18.2.3 案例:斷定型接口 577
18.2.4 案例:功能型接口 578
18.2.5 案例:員工信息管理 578
18.3 Lambda表達式再簡化 580
18.3.1 方法引用 580
18.3.2 構造器引用 582
18.3.3 數(shù)組構造引用 583
18.4 強大的Stream API 584
18.4.1 創(chuàng)建Stream對象 585
18.4.2 Stream中間操作 587
18.4.3 終止Stream操作 591
18.5 本章小結 593
第19章 Java 9~Java 17新特性 594
19.1 最新幾個Java版本概述 595
19.1.1 新特性簡介 595
19.1.2 版本更新說明 597
19.2 語法新特性 597
19.2.1 接口中允許私有方法 599
19.2.2 鉆石操作符與匿名內部類
結合 600
19.2.3 try語法改進 600
19.2.4 局部變量類型推斷 601
19.2.5 switch語句 603
19.2.6 文本塊 607
19.2.7 instanceof支持模式匹配 609
19.2.8 record 610
19.2.9 NullPointerException 612
19.2.10 密封類 613
19.2.11 隱藏類 613
19.3 API改進 614
19.3.1 String類 614
19.3.2 集合相關類 615
19.3.3 Stream API 617
19.3.4 Files及IO流 618
19.3.5 Optional類 619
19.3.6 支持壓縮數(shù)字格式化 621
19.3.7 支持日期周期格式化 621
19.3.8 @Deprecated注解 622
19.4 其他新特性 622
19.4.1 模塊化 622
19.4.2 jshell命令 625
19.4.3 垃圾回收器 627
19.4.4 更簡化的編譯運行程序 630
19.5 本章小結