內容簡介
本書以基礎知識與實際動手編碼相結合為原則,以Java從基礎到核心開發為主線,通過Java開發中的基本姜院影知識和常見的套用頸姜坑技術,介紹了實用性極強且頻繁戀霸請甩使用的Java技術。本書共18章,分為4篇。涵蓋的主要內容有:Java理論基礎、Java開發環境、Java語言基達獄戀充礎、流程控制、字元串、數組、對象謎贈翻與類、繼承和多態、JSP技術、
多執行緒技術、Java異常處理和調試技術、I/O系統編程、Java資料庫編程、Java網路編程、Java圖形界面編程及兩個綜合案例。本書內容豐富、實例典型、實用性強,適合各個層次想要學習Java開發技術的讀者閱讀,尤其適合沒有
Java基礎而又要快速成長為
Java程式設計師的讀者閱讀。
圖書目錄
第1篇 入門篇
第1章 認識Java 1
1.1 Java的發展史 1
1.1.1 Java起源 1
1.1.2 Java發展 2
1.2 Java是什麼 2
1.2.1 Java語言 2
1.2.3 Java網路作業系統 4
1.3 Java的特點 5
1.4 Java 8的新特性 6
1.5 Java程式類型 6
1.6 Java技術體系 7
1.7.1 Java虛擬機支持的數據類型 8
1.7.2 Java虛擬機的生命周期 9
1.7.3 Java虛擬機的體系結構 9
1.8 垃圾收集器 11
1.9 技術解惑 11
1.9.1 Java虛擬機如何實現跨平台運行 11
1.9.2 Java語言為什麼一直名列程式語言前三甲 12
第2章 搭建Java開發環境 14
2.1 J2SE的下載和安裝 14
2.1.1 J2SE的下載 15
2.1.2 J2SE的安裝 16
2.2 環境變數的配置與測試 17
2.2.2 配置環境變數CLASSPATH 18
2.2.3 環境變數的測試 19
2.3 API文檔的下載與使用 20
2.4 第一個應用程式 21
2.4.1 HelloWorld程式 21
2.4.2 程式編譯和運行命令 22
2.4.3 HelloWorld的編譯和運行 24
2.5 簡單開發工具介紹 26
2.5.1 使用EditPlus開發Java 26
2.5.2 使用UltraEdit開發Java 29
2.6 集成開發環境Eclipse介紹 33
2.6.1 Eclipse的下載與安裝 33
2.6.2 Eclipse的透視圖(Perspective) 35
2.6.3 Eclipse的視圖(View) 37
2.6.4 Eclipse的編輯器 37
2.6.5 Eclipse的工具列和選單欄 38
2.6.6 用Eclipse編寫HelloWorld程式 39
2.7 拓狼協展訓練 42
2.7.1 訓練一:用“*”直接輸出三角形 42
2.7.2 訓練二:可愛的表喇戰犁情符號 43
2.8 技術解惑 44
2.8.1 為什麼必須設定好環境變數 44
2.8.2 選擇Eclipse的多個原因 44
第3章 Java語言基礎 45
3.1 標識符 45
3.1.1 標識符的概念 45
3.1.2 變數的命名規則 46
3.1.3 變數的命名技巧 46
3.2 關鍵字 47
3.3 注釋 48
3.4 數據類型 49
3.4.1 整型 49
3.4.2 浮點型 50
3.4.3 字元型 51
3.4.4 布爾型 52
3.5 變數與常量 52
3.5.1 變數聲明 52
3.5.2 變數賦值和初始化 53
3.5.3 常量 53
3.6 類型轉換 54
3.6.1 數據類型之間的自動轉換 55
3.7 運算符 57
3.7.4 位運算符 61
3.7.5 自動遞增和遞減 64
3.7.7 運算符的優先權 66
3.8 拓展訓練 67
3.8.1 訓練一:不藉助第三者實現兩個變數值的互換 67
3.8.2 訓練二:獲取浮點數的最大/最小值 68
3.8.3 訓練三:實現字母的大小寫轉換 69
3.8.4 訓練四:實現輸入字元的加密和解密 72
3.9 技術解惑 73
3.9.1 三元運算符與if-else語句的不同之處 73
第4章 流程控制 74
4.1 順序結構 74
4.2 條件語句 76
4.2.1 if語句 76
4.2.2 if-else語句 78
4.2.3 if-else-if語句 80
4.2.4 if語句的嵌套 82
4.2.6 開關語句 87
4.3 循環語句 90
4.3.1 while循環語句 90
4.3.2 do-while循環語句 92
4.3.3 for循環語句 93
4.3.4 循環的嵌套 96
4.4 轉向語句 99
4.4.1 break中斷語句 99
4.4.2 continue條件繼續語句 101
4.4.3 標籤語句 103
4.5 返回語句 106
4.6 拓展訓練 109
4.6.1 訓練一:水仙花數 109
4.6.2 訓練二:判斷某一年是否為閏年 110
4.6.3 訓練三:根據收入情況計算個人所得稅 112
4.6.4 訓練四:列印九九乘法表 113
4.7 技術解惑 115
4.7.1 break和continue的區別 115
4.7.2 do-while和while的區別 115
第2篇 高級技術篇
第5章 字元串 116
5.1 字元串簡介 116
5.1.2 String創建字元串對象 117
5.1.3 StringBuffer創建字元串對象 119
5.2 連線字元串 120
5.2.1 與字元串的連線 121
5.2.2 與其他數據類型的連線 121
5.3 String類操作 122
5.3.1 基本操作方法 122
5.3.2 比較 124
5.3.3 轉換 127
5.3.4 查找 129
5.3.5 截取和拆分 130
5.3.6 替換或修改 132
5.4 StringBuffer類操作 134
5.4.1 基本操作 134
5.4.2 字元串操作方法 136
5.4.3 添加append() 139
5.4.4 插入insert() 140
5.5 拓展訓練 142
5.5.1 訓練一:字元串大小寫轉換 142
5.5.2 訓練二:將
數字貨幣金額轉換為大寫格式 143
5.5.3 訓練三:當前日期的格式化 146
5.5.4 訓練四:驗證IP位址的有效性 148
5.5.5 訓練五:獲取字元串中單詞的個數 149
5.6 技術解惑 150
5.6.1 String類和StringBuffer類有什麼區別 150
5.6.2 為什麼說String類是不可變類 151
第6章 數組 152
6.1 一維數組 152
6.1.1 數組的概念 153
6.1.2 一維數組的聲明 153
6.1.3 一維數組的初始化 153
6.1.4 一維數組的使用 154
6.1.5 一維數組的空間模型 156
6.1.6 基本數據類型數組 158
6.1.7 對象數組 159
6.1.8 數組參數 160
6.2 二維數組和多維數組 161
6.2.1 二維數組的聲明 161
6.2.2 二維數組的初始化 161
6.2.3 二維數組的空間模型 162
6.2.4 二維數組的套用 162
6.3 數組操作 164
6.3.1 Java 8增強的工具類:Arrays 164
6.3.2 排序 164
6.3.3 查找 166
6.3.4 複製 167
6.3.5 填充數據 170
6.3.6 比較 171
6.4 拓展訓練 173
6.4.1 訓練一:獲取一維數組中的最大最小值 173
6.4.2 訓練二:九宮格問題 175
6.4.3 訓練三:楊輝三角 177
6.5 技術解惑 179
6.5.1 Array和Arrays的區別到底是什麼 179
6.5.2 for和foreach在遍歷數組時的區別 179
第7章 對象與類 180
7.1 面向對象程式設計 180
7.1.1 面向對象程式設計概述 180
7.1.2 面向對象程式設計的特點 181
7.1.3 對象與類的關係 182
7.2 類的定義 184
7.2.1 MasterCard類的實現 184
7.2.2 MasterCard類的使用 186
7.2.3 訪問控制符 188
7.2.4 初識構造方法 190
7.2.5 方法的參數 191
7.2.6 封裝與隱藏 192
7.2.7 finalize()方法 194
7.3 靜態域與靜態方法 194
7.3.1 靜態域 195
7.3.2 靜態方法 197
7.3.3 Math類 198
7.4 構造方法 200
7.4.1 默認域初始化 200
7.4.2 默認構造方法 200
7.4.3 拷貝構造方法 201
7.4.4 構造方法的重載 201
7.4.5 構造方法的調用 202
7.4.6 創建初始化塊 202
7.5 包 204
7.5.1 包的概念 204
7.5.2 包的導入 204
7.5.3 包名與目錄的關係 205
7.5.4 靜態導入 207
7.5.5 Java包介紹 207
7.6 類設計技巧 208
7.7 實例:完善MasterCard類 209
7.7.1 構造方法 210
7.7.2 setter()方法 212
7.7.3 getter()方法 212
7.7.4 其他方法 213
7.8 main()方法 214
7.9 拓展訓練 215
7.9.1 訓練一:攝氏溫度與華氏溫度的轉換 215
7.9.2 訓練二:漢諾塔問題的解決 216
7.9.3 訓練三:使用局部內部類實現鬧鐘的套用 218
7.10 技術解惑 220
7.10.1 final、finally、finalize的區別 220
7.10.2 靜態代碼塊和靜態方法的區別 221
第8章 Java中的繼承 222
8.1 父類和子類 222
8.2 super()構造方法調用 223
8.3 封裝和繼承 225
8.4 使用繼承 227
8.4.1 Object類 227
8.4.2 定義equals()方法 228
8.5 關於設計好繼承的幾點建議 229
8.6 實例:一卡通類的繼承 230
8.6.1 構造方法 231
8.6.2 setter()方法 232
8.6.3 getter()方法 232
8.6.4 方法覆蓋 233
8.6.5 equals()方法 233
8.6.6 其他需要強調的地方 234
8.7 拓展訓練——領導和員工的差異 235
8.8 技術解惑 238
8.8.1 super語句必須是子類構造方法的第一句嗎 238
8.8.2 equals()方法的用法和“==”的用法一致嗎 238
第9章 更深一步:多態與抽象類 239
9.1 多態性的概念 239
9.2 重載 239
9.2.1 重載的概念 240
9.2.2 重載的注意事項 241
9.3 覆蓋 242
9.3.1 覆蓋的概念 242
9.3.2 覆蓋與訪問許可權 243
9.3.3 靜態方法覆蓋 245
9.3.4 覆蓋與異常拋出 246
9.3.5 抽象方法覆蓋 247
9.3.6 覆蓋與重載小結 247
9.4 綁定 249
9.4.1 靜態綁定 249
9.4.2 動態綁定 250
9.5 抽象類 252
9.5.1 抽象類的概念 253
9.5.2 抽象類的套用 253
9.5.3 抽象類套用的注意事項 255
9.6 Java 8改進的接口 256
9.6.1 接口的概念 256
9.6.2 Java 8中接口的定義 257
9.6.3 使用接口 258
9.6.4 接口的繼承 259
9.6.5 抽象類和接口 261
9.7 Java 8新增的Lambda表達式 262
9.7.2 Lambda表達式與函式式接口 264
9.7.3 方法引用與構造器引用 265
9.7.4 Lambda表達式與匿名內部類的聯繫和區別 269
9.8 拓展訓練——重寫(覆蓋)父類中的方法 270
9.9 技術解惑 272
9.9.1 什麼是Java的動態綁定與靜態綁定 272
9.9.2 抽象類到底有什麼用 272
第10章 Java Web套用——JSP 273
10.1 JSP技術概述 273
10.2 JSP運行環境搭建 273
10.2.1 Tomcat安裝 274
10.2.2 測試 276
10.2.3 第一個JSP程式 277
10.3 基本語法 278
10.3.2 隱藏注釋 278
10.3.3 聲明 279
10.3.4 表達式 279
10.3.5 腳本集(Scriptlet) 279
10.4 JSP指令元素 280
10.4.1 include指令 280
10.5 JSP動作元素 284
10.5.1285
10.5.2285
10.5.3289
10.5.4290
10.5.5290
10.5.6291
10.6 內置對象 292
10.6.1 out對象 292
10.6.5 application對象 299
10.6.6 pageContext對象 301
10.6.7 exception對象 303
10.6.8 config對象 305
10.7 拓展訓練 305
10.7.1 訓練一:一個註冊頁面 305
10.7.2 訓練二:跨頁傳遞數據 307
10.8 技術解惑 309
10.8.1 靜態include指令和動態include指令的比較 309
10.8.2 指令和動作的區別 310
第3篇 核心技術篇
第11章 多執行緒 311
11.1 執行緒基礎 311
11.1.1 什麼是執行緒 312
11.1.2 Thread類創建執行緒的方法 312
11.1.3 Thread類創建執行緒的步驟 315
11.1.4 Runnable接口創建執行緒的方法 316
11.1.5 Runnable接口創建執行緒的步驟 318
11.2 執行緒的生命周期 319
11.2.1 執行緒的4種狀態 320
11.2.2 執行緒的創建和啟動 321
11.3 執行緒調度 322
11.4 執行緒同步 325
11.4.1 同步的概念 325
11.4.2 同步的格式 327
11.4.3 同步的套用 328
11.5 執行緒通信 330
11.5.1 生產者/消費者 330
11.5.2 共享佇列 332
11.5.3 運行生產者/消費者 332
11.6 死鎖 335
11.7 拓展訓練 337
11.7.1 訓練一:籃球運動員的比賽安排 337
11.7.2 訓練二:ATM的實現 339
11.8 技術解惑 343
11.8.1 執行緒有哪5種基本狀態,它們如何相互轉換 343
11.8.2 如何讓一個執行緒運行特定的時間後優雅地終止 343
第12章 異常處理 345
12.1 異常的概念 345
12.2 異常的基本樣式 346
12.3 Java異常類 347
12.3.1 異常類的層次結構 348
12.3.2 異常處理方法 349
12.4 異常捕獲 351
12.4.1 異常捕獲處理語句塊 351
12.4.2 必須執行語句塊 354
12.4.3 必須執行語句塊的意外 355
12.5 異常拋出 356
12.5.1 異常拋出的概念 357
12.5.2 throw 357
12.5.3 throws 359
12.5.4 拋出異常的步驟 361
12.6 自定義異常 362
12.6.1 創建用戶自定義異常 362
12.6.2 捕獲運行時異常 364
12.7 拓展訓練 365
12.7.1 訓練一:強制類型轉換異常 365
12.7.2 訓練二:找不到指定類時異常 366
12.8 技術解惑 367
12.8.1 如何優雅地處理異常 367
12.8.2 詳解throw與throws關鍵字的用法區別 368
第13章 I/O系統 370
13.1 I/O概述 370
13.2 檔案 371
13.2.1 File類 371
13.2.2 File類的套用 373
13.2.3 RandomAccessFile類 375
13.2.4 RandomAccessFile類的套用 376
13.3 位元組流InputStream、OutputStream 379
13.3.1 位元組輸入、輸出流 379
13.3.2 位元組檔案輸入、輸出流 381
13.3.3 位元組緩衝輸入、輸出流 383
13.3.4 位元組數據輸入、輸出流 385
13.3.5 位元組對象輸入、輸出流 386
13.4 字元流Reader、Writer 390
13.4.1 字元讀、寫流 390
13.4.2 字元輸入、輸出流 391
13.4.3 檔案讀、寫字元流 393
13.4.4 字元緩衝區讀、寫流 394
13.5 拓展訓練 396
13.5.1 訓練一:按順序創建檔案 396
13.5.2 訓練二:將一個大檔案分割為多個小檔案 397
13.5.3 訓練三:生成ZIP壓縮檔案 399
13.6 技術解惑 402
13.6.1 把InputStream轉換成String的幾種方法 402
13.6.2 讀取大檔案用哪個類合適 403
第14章 Java資料庫編程 405
14.1 資料庫簡介 405
14.1.1 資料庫的概念 405
14.1.2 資料庫的特點 406
14.2.1 SQL語句的分類 407
14.2.2 SELECT查詢語句 407
14.2.3 INSERT插入語句 407
14.2.4 UPDATE更新語句 408
14.2.5 DELETE刪除語句 408
14.2.6 CREATE建表語句 408
14.2.7 ALTER修改表語句 409
14.2.8 DROP刪除表語句 409
14.3 MySQL 409
14.3.1 MySQL的安裝配置 410
14.3.2 MySQL的使用 413
14.4 JDBC 416
14.4.1 JDBC簡介 416
14.4.2 JDBC常見接口和類 417
14.4.3 JDBC資料庫連線步驟 417
14.4.5 獲取Connection連線對象 421
14.4.6 創建Statement對象 423
14.4.7 創建PreparedStatement對象 425
14.4.8 創建ResultSet對象 428
14.5 執行SQL語句的方式 430
14.5.1 使用JDBC API 430
14.5.2 使用execute()方法執行SQL語句 430
14.6 Java與各種資料庫的連線 432
14.7 資料庫開發案例 433
14.7.1 構造方法 433
14.7.2 數據查詢 434
14.7.3 主方法 436
14.8 拓展訓練 437
14.8.1 訓練一:向資料庫中批量插入數據 437
14.8.2 訓練二:將圖片檔案存入資料庫 439
14.9 技術解惑 442
14.9.1 多個connection能實現事務嗎 442
14.9.2 如何測試java.sql.Connection類當前的連線是否正常可用 442
第15章 Java網路編程 443
15.1 網路程式設計基礎 443
15.1.1 區域網路與網際網路 443
15.1.2 網路協定 444
15.1.3 連線埠和套接字 444
15.2 TCP程式設計基礎 446
15.2.1 InetAddress類 446
15.2.2 ServerSocket類 448
15.2.3 TCP網路程式 450
15.3 UDP程式設計基礎 453
15.3.1 DatagramPacket類 453
15.3.2 DatagramSocket類 453
15.3.3 UDP網路程式 454
15.4 拓展訓練 457
15.4.1 訓練一:實現網路檔案的下載 457
15.4.2 訓練二:模仿QQ創建實時聊天室 459
15.5 技術解惑 463
15.5.1 動態替換InetAddress中DNS的做法 463
15.5.2 輸出datagramPacket的字元串時後面有很多小方塊如何解決 464
第16章 Java圖形界面編程 465
16.1 AWT簡介 465
16.2 Swing基礎 466
16.2.1 Swing的類層次結構 467
16.2.2 Swing的特點 468
16.2.3 Swing程式結構簡介 468
16.3 事件類 470
16.3.1 事件類分類 470
16.3.2 動作事件類 471
16.3.3 調整事件類 471
16.3.4 焦點事件類 472
16.3.5 項目事件類 472
16.3.6 鍵盤事件類 473
16.3.7 滑鼠事件類 473
16.3.8 視窗事件類 474
16.4 事件監聽器 475
16.4.1 事件監聽器接口 475
16.4.2 事件監聽器的特點 477
16.5.1 根面板(JRootPane) 478
16.5.2 面板(JPanel) 478
16.5.3 分層面板(JLayeredPane) 479
16.5.4 滾動視窗(JScrollPane) 479
16.5.5 分隔板(JSplitPane) 479
16.5.6 選項板(JTabbedPane) 480
16.5.7 工具列(JToolBar) 480
16.6 Swing組件 480
16.6.1 按鈕(JButton) 481
16.6.2 複選框(JCheckBox) 481
16.6.3 單選框(JRadioButton) 484
16.6.4 組合框(JComboBox) 485
16.6.5 進度條(JProgressBar) 485
16.6.6 表格(JTable) 485
16.6.7 樹(JTree) 486
16.7 拓展訓練 487
16.7.1 訓練一:設定閃爍的標題欄 487
16.7.2 訓練二:建立簡單的時鐘布局 489
16.7.3 訓練三:給你最喜愛的脫口秀演員投票 492
16.7.4 訓練四:包含圖片的彈出選單 495
16.7.5 訓練五:震動效果的提示信息 497
16.8 技術解惑 499
16.8.1 Swing重要嗎 499
16.8.2 Swing是否適合做大型項目及桌面套用 499
第4篇 實戰篇
第17章 綜合案例:學生信息管理系統 501
17.1 需求分析 501
17.2 系統設計 501
17.3 登錄模組 503
17.3.1 設計構想 503
17.3.2 實現登錄模組 503
17.4 學生信息管理系統 506
17.4.1 設計構想 506
17.4.2 實現學生信息管理系統主界面 507
17.4.3 增加學生信息 509
17.4.4 刪除學生信息 512
17.4.5 修改學生信息 515
17.4.6 查詢學生信息 519
17.4.7 成績查詢 523
17.4.8 退出系統 526
17.5 教師信息管理系統 528
17.5.1 教師信息管理系統主界面 528
17.5.2 增加教師信息 531
17.5.3 刪除教師信息 534
17.5.4 修改教師信息 537
17.5.5 錄入成績 541
17.5.6 刪除成績 544
17.5.7 修改成績 547
17.5.8 教師信息查詢 550
17.5.9 退出系統 554
17.6 開發常見問題與解決 554
第18章 綜合案例:進銷存管理系統 556
18.1 系統分析 556
18.2 系統設計 557
18.2.1 系統架構 558
18.2.2 關鍵數據結構圖 559
18.3 開發環境 559
18.3.1 伺服器軟體環境 559
18.3.2 伺服器硬體環境 560
18.4 數據表設計 560
18.4.1 訂單表設計 560
18.4.2 商品表設計 560
18.4.3 用戶數據表設計 561
18.4.4 貨架數據表設計 561
18.4.5 銷售記錄數據表設計 561
18.4.6 工作記錄數據表設計 561
18.5 創建項目 562
18.6 系統資料夾組織結構 562
18.7 公共類設計 563
18.8 登錄模組設計 565
18.9 系統主視窗設計 565
18.10 進貨單模組設計 569
18.11 銷售單模組設計 571
18.12 庫存管理模組設計 573
18.13 資料庫備份與恢復模組設計 575
18.14 運行項目 576
18.15 系統打包發行 576
2.6 集成開發環境Eclipse介紹 33
2.6.1 Eclipse的下載與安裝 33
2.6.2 Eclipse的透視圖(Perspective) 35
2.6.3 Eclipse的視圖(View) 37
2.6.4 Eclipse的編輯器 37
2.6.5 Eclipse的工具列和選單欄 38
2.6.6 用Eclipse編寫HelloWorld程式 39
2.7 拓展訓練 42
2.7.1 訓練一:用“*”直接輸出三角形 42
2.7.2 訓練二:可愛的表情符號 43
2.8 技術解惑 44
2.8.1 為什麼必須設定好環境變數 44
2.8.2 選擇Eclipse的多個原因 44
第3章 Java語言基礎 45
3.1 標識符 45
3.1.1 標識符的概念 45
3.1.2 變數的命名規則 46
3.1.3 變數的命名技巧 46
3.2 關鍵字 47
3.3 注釋 48
3.4 數據類型 49
3.4.1 整型 49
3.4.2 浮點型 50
3.4.3 字元型 51
3.4.4 布爾型 52
3.5 變數與常量 52
3.5.1 變數聲明 52
3.5.2 變數賦值和初始化 53
3.5.3 常量 53
3.6 類型轉換 54
3.6.1 數據類型之間的自動轉換 55
3.7 運算符 57
3.7.4 位運算符 61
3.7.5 自動遞增和遞減 64
3.7.7 運算符的優先權 66
3.8 拓展訓練 67
3.8.1 訓練一:不藉助第三者實現兩個變數值的互換 67
3.8.2 訓練二:獲取浮點數的最大/最小值 68
3.8.3 訓練三:實現字母的大小寫轉換 69
3.8.4 訓練四:實現輸入字元的加密和解密 72
3.9 技術解惑 73
3.9.1 三元運算符與if-else語句的不同之處 73
第4章 流程控制 74
4.1 順序結構 74
4.2 條件語句 76
4.2.1 if語句 76
4.2.2 if-else語句 78
4.2.3 if-else-if語句 80
4.2.4 if語句的嵌套 82
4.2.6 開關語句 87
4.3 循環語句 90
4.3.1 while循環語句 90
4.3.2 do-while循環語句 92
4.3.3 for循環語句 93
4.3.4 循環的嵌套 96
4.4 轉向語句 99
4.4.1 break中斷語句 99
4.4.2 continue條件繼續語句 101
4.4.3 標籤語句 103
4.5 返回語句 106
4.6 拓展訓練 109
4.6.1 訓練一:水仙花數 109
4.6.2 訓練二:判斷某一年是否為閏年 110
4.6.3 訓練三:根據收入情況計算個人所得稅 112
4.6.4 訓練四:列印九九乘法表 113
4.7 技術解惑 115
4.7.1 break和continue的區別 115
4.7.2 do-while和while的區別 115
第2篇 高級技術篇
第5章 字元串 116
5.1 字元串簡介 116
5.1.2 String創建字元串對象 117
5.1.3 StringBuffer創建字元串對象 119
5.2 連線字元串 120
5.2.1 與字元串的連線 121
5.2.2 與其他數據類型的連線 121
5.3 String類操作 122
5.3.1 基本操作方法 122
5.3.2 比較 124
5.3.3 轉換 127
5.3.4 查找 129
5.3.5 截取和拆分 130
5.3.6 替換或修改 132
5.4 StringBuffer類操作 134
5.4.1 基本操作 134
5.4.2 字元串操作方法 136
5.4.3 添加append() 139
5.4.4 插入insert() 140
5.5 拓展訓練 142
5.5.1 訓練一:字元串大小寫轉換 142
5.5.2 訓練二:將
數字貨幣金額轉換為大寫格式 143
5.5.3 訓練三:當前日期的格式化 146
5.5.4 訓練四:驗證IP位址的有效性 148
5.5.5 訓練五:獲取字元串中單詞的個數 149
5.6 技術解惑 150
5.6.1 String類和StringBuffer類有什麼區別 150
5.6.2 為什麼說String類是不可變類 151
第6章 數組 152
6.1 一維數組 152
6.1.1 數組的概念 153
6.1.2 一維數組的聲明 153
6.1.3 一維數組的初始化 153
6.1.4 一維數組的使用 154
6.1.5 一維數組的空間模型 156
6.1.6 基本數據類型數組 158
6.1.7 對象數組 159
6.1.8 數組參數 160
6.2 二維數組和多維數組 161
6.2.1 二維數組的聲明 161
6.2.2 二維數組的初始化 161
6.2.3 二維數組的空間模型 162
6.2.4 二維數組的套用 162
6.3 數組操作 164
6.3.1 Java 8增強的工具類:Arrays 164
6.3.2 排序 164
6.3.3 查找 166
6.3.4 複製 167
6.3.5 填充數據 170
6.3.6 比較 171
6.4 拓展訓練 173
6.4.1 訓練一:獲取一維數組中的最大最小值 173
6.4.2 訓練二:九宮格問題 175
6.4.3 訓練三:楊輝三角 177
6.5 技術解惑 179
6.5.1 Array和Arrays的區別到底是什麼 179
6.5.2 for和foreach在遍歷數組時的區別 179
第7章 對象與類 180
7.1 面向對象程式設計 180
7.1.1 面向對象程式設計概述 180
7.1.2 面向對象程式設計的特點 181
7.1.3 對象與類的關係 182
7.2 類的定義 184
7.2.1 MasterCard類的實現 184
7.2.2 MasterCard類的使用 186
7.2.3 訪問控制符 188
7.2.4 初識構造方法 190
7.2.5 方法的參數 191
7.2.6 封裝與隱藏 192
7.2.7 finalize()方法 194
7.3 靜態域與靜態方法 194
7.3.1 靜態域 195
7.3.2 靜態方法 197
7.3.3 Math類 198
7.4 構造方法 200
7.4.1 默認域初始化 200
7.4.2 默認構造方法 200
7.4.3 拷貝構造方法 201
7.4.4 構造方法的重載 201
7.4.5 構造方法的調用 202
7.4.6 創建初始化塊 202
7.5 包 204
7.5.1 包的概念 204
7.5.2 包的導入 204
7.5.3 包名與目錄的關係 205
7.5.4 靜態導入 207
7.5.5 Java包介紹 207
7.6 類設計技巧 208
7.7 實例:完善MasterCard類 209
7.7.1 構造方法 210
7.7.2 setter()方法 212
7.7.3 getter()方法 212
7.7.4 其他方法 213
7.8 main()方法 214
7.9 拓展訓練 215
7.9.1 訓練一:攝氏溫度與華氏溫度的轉換 215
7.9.2 訓練二:漢諾塔問題的解決 216
7.9.3 訓練三:使用局部內部類實現鬧鐘的套用 218
7.10 技術解惑 220
7.10.1 final、finally、finalize的區別 220
7.10.2 靜態代碼塊和靜態方法的區別 221
第8章 Java中的繼承 222
8.1 父類和子類 222
8.2 super()構造方法調用 223
8.3 封裝和繼承 225
8.4 使用繼承 227
8.4.1 Object類 227
8.4.2 定義equals()方法 228
8.5 關於設計好繼承的幾點建議 229
8.6 實例:一卡通類的繼承 230
8.6.1 構造方法 231
8.6.2 setter()方法 232
8.6.3 getter()方法 232
8.6.4 方法覆蓋 233
8.6.5 equals()方法 233
8.6.6 其他需要強調的地方 234
8.7 拓展訓練——領導和員工的差異 235
8.8 技術解惑 238
8.8.1 super語句必須是子類構造方法的第一句嗎 238
8.8.2 equals()方法的用法和“==”的用法一致嗎 238
第9章 更深一步:多態與抽象類 239
9.1 多態性的概念 239
9.2 重載 239
9.2.1 重載的概念 240
9.2.2 重載的注意事項 241
9.3 覆蓋 242
9.3.1 覆蓋的概念 242
9.3.2 覆蓋與訪問許可權 243
9.3.3 靜態方法覆蓋 245
9.3.4 覆蓋與異常拋出 246
9.3.5 抽象方法覆蓋 247
9.3.6 覆蓋與重載小結 247
9.4 綁定 249
9.4.1 靜態綁定 249
9.4.2 動態綁定 250
9.5 抽象類 252
9.5.1 抽象類的概念 253
9.5.2 抽象類的套用 253
9.5.3 抽象類套用的注意事項 255
9.6 Java 8改進的接口 256
9.6.1 接口的概念 256
9.6.2 Java 8中接口的定義 257
9.6.3 使用接口 258
9.6.4 接口的繼承 259
9.6.5 抽象類和接口 261
9.7 Java 8新增的Lambda表達式 262
9.7.2 Lambda表達式與函式式接口 264
9.7.3 方法引用與構造器引用 265
9.7.4 Lambda表達式與匿名內部類的聯繫和區別 269
9.8 拓展訓練——重寫(覆蓋)父類中的方法 270
9.9 技術解惑 272
9.9.1 什麼是Java的動態綁定與靜態綁定 272
9.9.2 抽象類到底有什麼用 272
第10章 Java Web套用——JSP 273
10.1 JSP技術概述 273
10.2 JSP運行環境搭建 273
10.2.1 Tomcat安裝 274
10.2.2 測試 276
10.2.3 第一個JSP程式 277
10.3 基本語法 278
10.3.2 隱藏注釋 278
10.3.3 聲明 279
10.3.4 表達式 279
10.3.5 腳本集(Scriptlet) 279
10.4 JSP指令元素 280
10.4.1 include指令 280
10.5 JSP動作元素 284
10.5.1285
10.5.2285
10.5.3289
10.5.4290
10.5.5290
10.5.6291
10.6 內置對象 292
10.6.1 out對象 292
10.6.5 application對象 299
10.6.6 pageContext對象 301
10.6.7 exception對象 303
10.6.8 config對象 305
10.7 拓展訓練 305
10.7.1 訓練一:一個註冊頁面 305
10.7.2 訓練二:跨頁傳遞數據 307
10.8 技術解惑 309
10.8.1 靜態include指令和動態include指令的比較 309
10.8.2 指令和動作的區別 310
第3篇 核心技術篇
第11章 多執行緒 311
11.1 執行緒基礎 311
11.1.1 什麼是執行緒 312
11.1.2 Thread類創建執行緒的方法 312
11.1.3 Thread類創建執行緒的步驟 315
11.1.4 Runnable接口創建執行緒的方法 316
11.1.5 Runnable接口創建執行緒的步驟 318
11.2 執行緒的生命周期 319
11.2.1 執行緒的4種狀態 320
11.2.2 執行緒的創建和啟動 321
11.3 執行緒調度 322
11.4 執行緒同步 325
11.4.1 同步的概念 325
11.4.2 同步的格式 327
11.4.3 同步的套用 328
11.5 執行緒通信 330
11.5.1 生產者/消費者 330
11.5.2 共享佇列 332
11.5.3 運行生產者/消費者 332
11.6 死鎖 335
11.7 拓展訓練 337
11.7.1 訓練一:籃球運動員的比賽安排 337
11.7.2 訓練二:ATM的實現 339
11.8 技術解惑 343
11.8.1 執行緒有哪5種基本狀態,它們如何相互轉換 343
11.8.2 如何讓一個執行緒運行特定的時間後優雅地終止 343
第12章 異常處理 345
12.1 異常的概念 345
12.2 異常的基本樣式 346
12.3 Java異常類 347
12.3.1 異常類的層次結構 348
12.3.2 異常處理方法 349
12.4 異常捕獲 351
12.4.1 異常捕獲處理語句塊 351
12.4.2 必須執行語句塊 354
12.4.3 必須執行語句塊的意外 355
12.5 異常拋出 356
12.5.1 異常拋出的概念 357
12.5.2 throw 357
12.5.3 throws 359
12.5.4 拋出異常的步驟 361
12.6 自定義異常 362
12.6.1 創建用戶自定義異常 362
12.6.2 捕獲運行時異常 364
12.7 拓展訓練 365
12.7.1 訓練一:強制類型轉換異常 365
12.7.2 訓練二:找不到指定類時異常 366
12.8 技術解惑 367
12.8.1 如何優雅地處理異常 367
12.8.2 詳解throw與throws關鍵字的用法區別 368
第13章 I/O系統 370
13.1 I/O概述 370
13.2 檔案 371
13.2.1 File類 371
13.2.2 File類的套用 373
13.2.3 RandomAccessFile類 375
13.2.4 RandomAccessFile類的套用 376
13.3 位元組流InputStream、OutputStream 379
13.3.1 位元組輸入、輸出流 379
13.3.2 位元組檔案輸入、輸出流 381
13.3.3 位元組緩衝輸入、輸出流 383
13.3.4 位元組數據輸入、輸出流 385
13.3.5 位元組對象輸入、輸出流 386
13.4 字元流Reader、Writer 390
13.4.1 字元讀、寫流 390
13.4.2 字元輸入、輸出流 391
13.4.3 檔案讀、寫字元流 393
13.4.4 字元緩衝區讀、寫流 394
13.5 拓展訓練 396
13.5.1 訓練一:按順序創建檔案 396
13.5.2 訓練二:將一個大檔案分割為多個小檔案 397
13.5.3 訓練三:生成ZIP壓縮檔案 399
13.6 技術解惑 402
13.6.1 把InputStream轉換成String的幾種方法 402
13.6.2 讀取大檔案用哪個類合適 403
第14章 Java資料庫編程 405
14.1 資料庫簡介 405
14.1.1 資料庫的概念 405
14.1.2 資料庫的特點 406
14.2.1 SQL語句的分類 407
14.2.2 SELECT查詢語句 407
14.2.3 INSERT插入語句 407
14.2.4 UPDATE更新語句 408
14.2.5 DELETE刪除語句 408
14.2.6 CREATE建表語句 408
14.2.7 ALTER修改表語句 409
14.2.8 DROP刪除表語句 409
14.3 MySQL 409
14.3.1 MySQL的安裝配置 410
14.3.2 MySQL的使用 413
14.4 JDBC 416
14.4.1 JDBC簡介 416
14.4.2 JDBC常見接口和類 417
14.4.3 JDBC資料庫連線步驟 417
14.4.5 獲取Connection連線對象 421
14.4.6 創建Statement對象 423
14.4.7 創建PreparedStatement對象 425
14.4.8 創建ResultSet對象 428
14.5 執行SQL語句的方式 430
14.5.1 使用JDBC API 430
14.5.2 使用execute()方法執行SQL語句 430
14.6 Java與各種資料庫的連線 432
14.7 資料庫開發案例 433
14.7.1 構造方法 433
14.7.2 數據查詢 434
14.7.3 主方法 436
14.8 拓展訓練 437
14.8.1 訓練一:向資料庫中批量插入數據 437
14.8.2 訓練二:將圖片檔案存入資料庫 439
14.9 技術解惑 442
14.9.1 多個connection能實現事務嗎 442
14.9.2 如何測試java.sql.Connection類當前的連線是否正常可用 442
第15章 Java網路編程 443
15.1 網路程式設計基礎 443
15.1.1 區域網路與網際網路 443
15.1.2 網路協定 444
15.1.3 連線埠和套接字 444
15.2 TCP程式設計基礎 446
15.2.1 InetAddress類 446
15.2.2 ServerSocket類 448
15.2.3 TCP網路程式 450
15.3 UDP程式設計基礎 453
15.3.1 DatagramPacket類 453
15.3.2 DatagramSocket類 453
15.3.3 UDP網路程式 454
15.4 拓展訓練 457
15.4.1 訓練一:實現網路檔案的下載 457
15.4.2 訓練二:模仿QQ創建實時聊天室 459
15.5 技術解惑 463
15.5.1 動態替換InetAddress中DNS的做法 463
15.5.2 輸出datagramPacket的字元串時後面有很多小方塊如何解決 464
第16章 Java圖形界面編程 465
16.1 AWT簡介 465
16.2 Swing基礎 466
16.2.1 Swing的類層次結構 467
16.2.2 Swing的特點 468
16.2.3 Swing程式結構簡介 468
16.3 事件類 470
16.3.1 事件類分類 470
16.3.2 動作事件類 471
16.3.3 調整事件類 471
16.3.4 焦點事件類 472
16.3.5 項目事件類 472
16.3.6 鍵盤事件類 473
16.3.7 滑鼠事件類 473
16.3.8 視窗事件類 474
16.4 事件監聽器 475
16.4.1 事件監聽器接口 475
16.4.2 事件監聽器的特點 477
16.5.1 根面板(JRootPane) 478
16.5.2 面板(JPanel) 478
16.5.3 分層面板(JLayeredPane) 479
16.5.4 滾動視窗(JScrollPane) 479
16.5.5 分隔板(JSplitPane) 479
16.5.6 選項板(JTabbedPane) 480
16.5.7 工具列(JToolBar) 480
16.6 Swing組件 480
16.6.1 按鈕(JButton) 481
16.6.2 複選框(JCheckBox) 481
16.6.3 單選框(JRadioButton) 484
16.6.4 組合框(JComboBox) 485