好好學 Java : 從零基礎到項目實戰
內容描述
本書是一部Java基礎開發教程,使用Java 11版本,以IntelliJ IDEA為開發環境,
從軟件工程的視角講解Java編程的各種知識,由淺入深,
由理論到實戰,帶領讀者走進Java編程的廣袤世界。
全書共分為17章。
其中第1~6章介紹Java的常見數據類型及開發,包括基本變量類型、
數組類型、包裝變量類型、字符串類型以及日期時間類型;
第7~11章介紹面向對象的開發過程,包括面向對象的三要素(封裝、繼承、多態)、
面向對象的擴展(嵌套、枚舉、抽象、接口)、面向對象的應用(容器、泛型、文件IO)、
面向對象的特殊處理(異常、反射、註解)以及基於面向對象的函數式編程;
第12~14章介紹Java語言的界面編程,包括AWT、Swing、JavaFX三大圖形框架的編碼運用;
第15~17章介紹Java編程的高級開發,包括多線程、網絡通信和數據庫操作,
各章末尾著重描述打地鼠遊戲、即時通信工具、詩歌管理系統三大實戰項目的軟件設計及編碼實現。
本書適用於Java編程的初學者、有志於轉型Java開發的程序員,
也可作為大中專院校與培訓機構的Java基礎課程教材。
目錄大綱
第1章Java開發環境搭建1
1.1 JDK的安裝和配置1
1.1.1 Java的發展歷程1
1.1.2下載和安裝JDK 2
1.1.3配置環境變量4
1.2 IntelliJ IDEA的安裝與配置5
1.2.1安裝IntelliJ IDEA 6
1.2.2配置IntelliJ IDEA 7
1.2.3運行個Java程序9
1.3 Java虛擬機(JVM) 12
1.3.1 Java程序的運行機制13
1.3.2 JVM的體系結構13
1.3.3 JVM、JRE與JDK的區別15
1.4 Java編程的基本概念16
1.4.1 Java的代碼結構16
1.4.2 Java的特殊官吏19
1.4.3 Java的度量衡22
1.5小結25
第2章數學運算26
2.1數值變量26
2.1.1數值變量的類型26
2.1.2特殊數字的表達28
2.1.3強制類型轉換30
2.2算術運算32
2.2.1四則運算符32
2.2.2賦值運算符34
2.2.3一元運算符35
2.3數學函數37
2.3.1取整函數37
2.3.2取隨機數38
2.3.3科學計算函數38
2.3.4三角函數39
2.4實戰練習39
2.4.1利用牛頓迭代法求平方根39
2.4.2利用割圓術求解圓周率42
2.5小結46
第3章邏輯控制47
3.1邏輯運算47
3.1.1布爾類型及其運算47
3.1. 2關係運算符49
3.1.3運算符的優先級順序50
3.1.4按位邏輯與短路邏輯52
3.2控制語句53
3.2.1條件分支53
3.2.2多路分支54
3.2.3 while循環56
3.2. 4 for循環58
3.3數組59
3.3.1一維數組60
3.3.2二維數組62
3.3.3冒號的幾種用法64
3.3.4數組工具Arrays 67
3.4實戰練習71
3.4.1求解“雞兔同籠”問題71
3.4.2求解“韓信點兵”問題72
3.4.3利用二分查找法定位數組元素74
3.5小結77
第4章方法與包裝78
4.1方法定義78
4.1.1方法的組成形式78
4.1.2方法的輸入參數80
4.1.3方法的輸出參數83
4.2基本類型包裝86
4.2.1數值類型包裝86
4.2.2包裝變量的運算88
4.2.3布爾類型包裝89
4.3大數字類型90
4.3.1大整數BigInteger 90
4.3.2大小數BigDecimal 91
4.4實戰練習93
4.4.1通過方法遞歸實現階乘函數93
4.4.2利用牛頓迭代法求大數開方95
4.4.3利用大數字求更的圓周率97
4.5小結100
第5章字符串與正則表達式101
5.1字符101
5.1.1字符類型101
5.1.2字符型與整型的相互轉化102
5.1.3字符包裝類型104
5.2字符串105
5.2.1字符串的賦值與轉換105
5.2.2字符串的格式化107
5.2.3其他常見的字符串方法111
5.3正則表達式113
5.3.1利用正則串分割字符串113
5.3.2利用正則表達式校驗字符串117
5.4實戰練習120
5.4.1從地址串中解析收件人信息120
5.4.2校驗身份證號碼的合法性124
5.5小結128
第6章日期時間129
6.1日期工具Date 129
6.1.1日期工具的用法129
6.1.2日期時間的格式化131
6.2日曆工具Calendar 134
6.2.1日曆工具的用法134
6.2.2日曆工具的常見應用136
6.3 Java 8的本地日期時間工具139
6.3.1本地日期LocalDate和本地時間LocalTime 139
6.3. 2本地日期時間與字符串的互相轉換142
6.4實戰練習144
6.4.1從1582年問題淺談Date工具的局限144
6.4.2利用本地日期時間實現萬年曆148
6.5小結150
第7章類的三要素151
7.1類的封裝151
7.1.1類的成員定義151
7.1.2類的構造方法156
7.1.3 this關鍵字的用法157
7.2類的繼承159
7.2.1類的簡單繼承159
7.2.2父類:關鍵字super的用法161
7.2.3幾種開放性修飾符164
7.3類的多態165
7.3.1多態的發生場景165
7.3.2對象的類型檢查167
7.3.3終態:關鍵字final的用法169
7.4實戰練習:定義銀行的賬戶類171
7.5小結177
第8章特殊的類178
8.1類的嵌套178
8.1.1內部類和嵌套類178
8.1.2靜態:關鍵字static的用法181
8.1.3枚舉類型185
8.2類的抽象188
8.2.1抽像類188
8.2.2簡單接口190
8.2.3 Java 8之後的擴展接口193
8.2.4匿名內部類195
8.3函數式編程198
8.3.1 Lambda表達式198
8.3.2函數式接口的定義200
8.3.3雙冒號標記的方法引用202
8.3.4靜態方法引用和實例方法引用206
8.4實戰練習210
8.4.1實現建造者模式210
8.4.2實現單例模式214
8.5小結218
第9章容器與泛型219
9.1容器的種類219
9.1.1集合:HashSet和TreeSet 219
9.1.2映射:HashMap和TreeMap 224
9.1.3清單:ArrayList和LinkedList 226
9.2泛型的規則228
9.2.1從泛型方法探究泛型的起源229
9.2.2泛型類的定義及其運用232
9.2.3 Java 8新增的幾種泛型接口234
9.3容器的加工240
9.3.1容器與數組互轉240
9.3.2容器工具Collections 242
9.3.3 Java 8新增的流式處理243
9.4實戰練習246
9.4.1利用泛型實現通用的二分查找算法246
9.4.2借助容器實現兩種常見的排隊算法249
9.5小結253
第10章類的進階用法254
10.1異常254
10.1.1常見的程序異常254
10.1.2內存溢出的兩種錯誤257
10.1 .3異常的處理:扔出與捕捉259
10.1.4如何預防異常的產生263
10.1.5使用Optional規避空指針異常265
10.2反射269
10.2.1面向對象的後門——反射269
10.2.2利用反射技術操作私有屬性271
10.2.3利用反射技術操作私有方法273
10.3註解275
10.3.1如何使用系統自帶的註解276
10.3.2註解的基本單元——元註解278
10.3.3利用註解技術檢查空指針279
10.4小結283
第11章文件I/O處理284
11.1文件讀寫284
11.1.1文件與目錄的管理284
11.1.2字符流讀寫286
11.1.3緩衝區讀寫290
11.1.4隨機訪問文件的讀寫293
11.2 I/O輸入輸出流295
11.2. 1文件I/O字節流296
11.2.2緩存I/O字節流297
11.2.3對象序列化299
11.2.4 I/O流處理簡單的數據壓縮302
11.3 NIO文件編程304
11.3.1文件通道FileChannel 304
11.3.2字節緩存ByteBuffer 307
11.3.3文件通道的性能優勢309
11.3.4路徑工具Paths和Files 311
11.4實戰練習:文件的分割與合併314
11.5小結317
第12章AWT界面編程318
12.1 AWT的窗口面板318
12.1.1框架Frame 318
12.1.2按鈕Button 320
12.1.3佈局Layout 322
12.2 AWT的文本控件324
12.2.1標籤Label 324
12.2.2輸入框TextField和TextArea 328
12.2.3選擇框Checkbox 330
12.3 AWT的圖像處理332
12.3.1自定義圖像視圖332
12.3.2繪圖工具Graphics 334
12.3.3利用Graphics2D加工圖像337
12.4實戰練習:生成驗證碼圖片341
12.5小結344
第13章Swing界面編程345
13.1 Swing的基礎界面345
13.1.1框架JFrame和按鈕JButton 345
13.1.2標籤JLabel 347
13.1.3利用標籤顯示圖像349
13.2 Swing的簡單控件350
13.2.1輸入框的種類351
13.2.2選擇框的種類352
13.2.3列錶框的種類355
13.3 Swing的高級控件359
13.3.1表格JTable 359
13.3.2基本對話框361
13.3.3文件對話框364
13.4實戰練習368
13.4.1簡單的登錄界面368
13.4.2將Java代碼導出JAR包371
13.5小結373
第14章JavaFX界面編程374
14.1 JavaFX的基本場景374
14.1.1 JavaFX的初始配置374
14.1.2窗格Pane 377
14.1.3按鈕Button和標籤Label 379
14.1.4箱子HBox和VBox 382
14.2 JavaFX的常用控件385
14.2.1輸入框的種類385
14.2.2選擇框的種類388
14.2.3列表與表格393
14.2.4對話框的種類397
14.3 JavaFX的佈局設計403
14.3.1 FXML佈局的基本格式403
14.3.2實現FXML對應的控制器407
14.3.3 FXML佈局的伸展適配409
14.4實戰練習412
14.4.1房貸計算器(簡易版) 412
14.4.2 JavaFX導出可執行程序417
14.4.3房貸計算器(完整版) 420
14.5小結424
第15章多線程425
15.1線程的調度425
15.1.1線程的基本用法425
15.1.2任務Runnable 430
15.1.3過程Callable 433
15.1.4定時器與定時任務435
15.2並發的控制437
15.2.1同步:關鍵字synchronized的用法437
15.2.2通過加解鎖避免資源衝突440
15.2.3信號量Semaphore的請求與釋放443
15.2.4線程間的通信方式447
15.3線程池管理451
15.3 .1普通線程池451
15.3.2定時器線程池456
15.3.3分治框架Fork/Join 459
15.4實戰練習463
15.4.1秒錶計時器463
15.4.2打地鼠遊戲467
15.5小結473
第16章網絡通信474
16.1網絡交互的數據格式474
16.1.1 URL地址的組成格式474
16.1.2 JSON串的解析477
16.1.3 XML報文的解析482
16.2 HTTP接口訪問486
16.2.1 GET方式的HTTP調用486
16.2.2 POST方式的HTTP調用492
16.2.3 Java 11新增的HttpClient 495
16.2.4 HttpClient實現下載與上傳499
16.3套接字Socket通信502
16.3.1利用Socket傳輸文本502
16.3.2使用Socket傳輸文件507
16.3.3採用UDP協議的Socket通信510
16.3.4利用HttpServer搭建簡易服務器512
16.4實戰練習514
16.4.1 HTTP測試工具515
16.4.2讓Java程序輸出日誌文件519
16.4.3多人即時通信——仿QQ聊天523
16.5小結534
第17章數據庫操作535
17.1 MySQL環境搭建535
17.1. 1安裝MySQL數據庫535
17.1.2安裝MySQL工作台547
17.1.3數據庫操縱語言SQL的用法553
17.2 JDBC編程557
17.2.1 JDBC的應用原理557
17.2.2通過JDBC管理數據庫559
17.2.3通過JDBC查詢數據記錄562
17.2.4預報告PreparedStatement 565
17.3數據庫連接池567
17.3.1 C3P0連接池567
17.3.2 Druid連接池569
17.4實戰練習572
17.4.1代碼生成工具572
17.4.2讓Java程序讀取配置文件578
17.4.3詩歌管理系統——古詩三百首581
17.5小結589
附錄A服務端工程的使用說明590
A.1下載並安裝Tomcat 590
A.2給IDEA安裝Tomcat插件591
A.3添加Tomcat的運行配置592
A.4啟動Tomcat服務器595
作者介紹
歐陽燊
碩士,CSDN博客專家,有16年以上軟件開發經驗,熟悉C/C++、Java、Android開發,
著有暢銷書《Android Studio開發實戰:從零基礎到App上線》。