本書以最新的Java SE 8為基礎,全面講解Java編程語言、Java面向對象技術和Java核心類庫。全書共18章,主要內容包括Java語言基礎(數據類型、運算符與表達式、程序流程控制)、類與對象基礎、數組與字符串、Java面向對象特征(類的繼承與多態、內部類與注解類型、接口與Lambda表達式)、常用核心類、泛型與集合框架、異常處理、輸入輸出、JavaFX圖形界面及事件處理、常用控件、JDBC數據庫編程、并發編程基礎、網絡編程等。
本書知識點全面,體系結構清晰,重點突出,文字準確,內容組織循序漸進,并有大量精選示例。每章配有精心設計的編程練習題,幫助讀者理解掌握編程技術。本書提供教學課件、程序源代碼以及部分教學視頻與習題解答等資源。
本書可作為高等院校計算機專業或相關專業的“Java程序設計”或“面向對象程序設計”課程的教材,也可作為Java認證考試及編程愛好者的參考資料。
前言
Java是一門卓越的程序設計語言,同時,它也是基于Java語言、從移動應用開發到企業級開發的平臺。隨著Web的發展,應用Web成為大型應用開發的主流方式,Java憑借其“編寫一次,到處運行”的特性很好地支持了互聯網應用所要求的跨平臺能力,成為服務器端開發的主流語言。現在人類已進入移動互聯網時代,而Java依然是當之無愧的主角。
Java是一門經典的面向對象語言,同時也是一門優秀的教學語言。Java擁有優雅和簡明的語法以及豐富的類庫,讓編程人員盡可能地將精力集中在業務領域的問題求解上。
本版在第2版的基礎上增加了Java SE 8的新特性,如接口的默認方法和靜態方法、Lambda表達式、新的日期/時間API、Stream API,圖形用戶界面用JavaFX替換了Swing,另外增加了Java網絡編程一章,其他章節也做了部分修訂。
本書作為面向初學者的教程,編寫和取材著重體現Java面向對象編程思想和面向問題求解的理念。本書采用基礎優先的方式,從編程基礎開始,逐步引入面向對象思想。
本書包含三大主題,這是一名專業Java程序員必須熟練掌握的內容。
-
Java編程語言;
-
Java面向對象思想;
-
Java核心類庫。
全書共18章,主要內容如下:
第1章介紹Java語言的起源和發展、Java開發環境的構建、簡單Java程序的開發和運行、程序設計風格與文檔以及集成開發環境Eclipse的使用。
第2章介紹數據類型、常用運算符、表達式以及數據類型的轉換等。
第3章介紹程序的流程控制結構,包括選擇結構和循環結構。重點介紹if結構、switch結構、while循環、do-while循環以及for循環結構。
第4章首先介紹了面向對象編程的基本概念,然后講解Java類的定義以及對象的創建,其中還包括方法的設計、static修飾符的使用、包的概念以及類的導入等。
第5和第6章介紹Java數組和字符串及其應用,包括數組和多維數組、String類、StringBuilder類和StringBuffer類,另外還介紹了Arrays類的使用、格式化輸出等。
第7章介紹類的繼承與多態,其中包括繼承性、封裝性、多態性以及對象轉換等。這是面向對象編程的核心內容。
第8章介紹Java常用核心類,包括Object類、Math類、基本數據類型包裝類等,另外介紹了Java 8新增的日期-時間API相關的類。
第9章介紹內部類、枚舉類型和注解類型,包括各種類型的內部類、枚舉的定義與使用,標準注解的使用、自定義注解類型。
第10章介紹接口和Lambda表達式,包括接口的定義、接口繼承、接口實現以及在接口中定義靜態方法和默認方法。此外,還介紹了Lambda表達式的使用。
第11章介紹Java集合框架,包括泛型編程基本概念、各種類型集合接口與類的使用、Collections類的常用方法,同時還介紹了Stream API的簡單用法。
第12章介紹Java異常處理,包括異常類型、異常處理機制、自定義異常、斷言的使用。
第13章介紹Java輸入輸出,包括二進制流和文本流的使用、對象序列化以及Files類的常用操作。
第14和第15章介紹JavaFX圖形界面編程,包括界面布局面板、JavaFX各類形狀的使用、事件處理,還包括圖像和特效、多媒體和動畫以及各種常用控件的使用。
第16章介紹JDBC數據庫編程基礎,包括數據庫和MySQL基礎,數據庫訪問步驟、常用的JDBC API以及DAO設計模式等。
第17章介紹Java并發編程基礎,包括多線程編程、線程的狀態與調度、線程同步與協調、并發工具等。
第18章介紹Java網絡編程,包括基于TCP的Java套接字和基于UDP的編程、基于HTTP的URL編程等。
本書吸取了國內外有關著作和資料的精華,強調面向問題求解的教學方法是本書特色,同時凝聚了作者多年的教學實踐經驗。
本書每章提供的二維碼可觀看相應章節的視頻講解。掃描封底“課件下載”二維碼可獲得本書PPT教學課件、程序源代碼、教學大綱等課程資源。與本書配套的《Java語言程序設計(第3版)學習指導與習題解析》(清華大學出版社出版)中提供了學習指導、實訓任務及編程練習的參考答案。
本書由沈澤剛主編,傘曉麗、彭霞、孫蕾、宋微、董研、張麗娟等教師參加了部分編寫和資料整理工作。本書出版得到了清華大學出版社魏江江主任的大力支持與合作。在此謹向以上各位表示衷心感謝。
本書在寫作中參考了大量文獻,向這些文獻的作者表示衷心感謝。由于作者水平有限,書中難免存在不妥和錯誤之處,懇請廣大讀者和同行批評指正。
第1章 Java語言概述... 1
1.1 Java起源與發展... 1
1.1.1 Java的起源... 1
1.1.2 Java的發展歷程... 2
1.1.3 Java語言的優點... 3
1.2 Java平臺與開發環境... 3
1.2.1 Java平臺與應用領域... 3
1.2.2 JDK、JRE和JVM.. 4
1.2.3 Java字節碼與平臺獨立... 4
1.2.4 JDK的下載與安裝... 5
1.2.5 Java API文檔... 6
1.3 Java程序基本結構... 6
1.3.1 Java程序開發步驟... 6
1.3.2 第一個程序分析... 8
1.4 程序文檔風格和注釋... 9
1.4.1 一致的縮進和空白... 9
1.4.2 塊的風格... 9
1.4.3 Java程序注釋... 10
1.5 Eclipse集成開發環境... 10
1.6 小結... 12
編程練習... 12
第2章 Java語言基礎... 13
2.1 簡單程序的開發... 13
2.1.1 從鍵盤讀取數據... 14
2.1.2 變量與賦值... 15
2.1.3 Java標識符... 15
2.1.4 Java關鍵字... 16
2.2 數據類型... 16
2.2.1 數據類型概述... 16
2.2.2 字面值和常量... 17
2.2.3 整數類型... 17
2.2.4 浮點類型... 19
2.2.5 字符類型... 20
2.2.6 布爾類型... 21
2.2.7 字符串類型... 22
2.3 運算符... 23
2.3.1 算術運算符... 23
2.3.2 關系運算符... 25
2.3.3 邏輯運算符... 25
2.3.4 賦值運算符... 26
2.3.5 位運算符... 28
2.3.6 運算符的優先級和結合性... 30
2.4 數據類型轉換... 31
2.4.1 自動類型轉換... 31
2.4.2 強制類型轉換... 32
2.4.3 表達式中類型自動提升... 33
2.5 小結... 34
編程練習... 34
第3章 選擇與循環... 36
3.1 選擇... 36
3.1.1 單分支if語句... 36
3.1.2 雙分支if-else語句... 37
3.1.3 嵌套的if語句和多分支的if-else語句... 39
3.1.4 條件運算符... 40
3.1.5 switch語句結構... 41
3.2 循環... 43
3.2.1 while循環... 43
3.2.2 do-while循環... 45
3.2.3 for循環... 45
3.2.4 循環的嵌套... 47
3.2.5 break語句和continue語句... 47
3.3 示例學習... 49
3.3.1 任意抽取一張牌... 49
3.3.2 求最大公約數... 50
3.3.3 打印輸出若干素數... 51
3.4 小結... 52
編程練習... 53
第4章 類和對象... 55
4.1 面向對象概述... 55
4.1.1 OOP的產生... 55
4.1.2 面向對象的基本概念... 56
4.1.3 面向對象基本特征... 57
4.1.4 OOP的優勢... 58
4.2 為對象定義類... 58
4.2.1 類的定義... 59
4.2.2 對象的使用... 62
4.2.3 理解棧與堆... 64
4.2.4 用UML圖表示類... 64
4.3 方法設計... 65
4.3.1 如何設計方法... 65
4.3.2 方法的調用... 67
4.3.3 方法重載... 67
4.3.4 構造方法... 68
4.3.5 this關鍵字的使用... 70
4.3.6 方法參數的傳遞... 71
4.4 靜態變量和靜態方法... 72
4.4.1 靜態變量... 72
4.4.2 靜態方法... 74
4.4.3 單例模式... 75
4.4.4 遞歸... 76
4.5 對象初始化和清除... 77
4.5.1 實例變量的初始化... 77
4.5.2 靜態變量的初始化... 79
4.5.3 垃圾回收器... 80
4.5.4 變量作用域和生存期... 81
4.6 包與類的導入... 82
4.6.1 包... 82
4.6.2 類的導入... 84
4.6.3 Java編譯單元... 85
4.7 小結... 85
編程練習... 86
第5章 數組... 90
5.1 創建和使用數組... 90
5.1.1 數組定義... 90
5.1.2 增強的for循環... 93
5.1.3 數組元素的復制... 93
5.1.4 數組參數與返回值... 95
5.1.5 可變參數的方法... 96
5.1.6 實例:隨機抽取4張牌... 97
5.1.7 實例:一個整數棧類... 98
5.2 Arrays類... 99
5.2.1 數組的排序... 100
5.2.2 元素的查找... 100
5.2.3 數組元素的復制... 101
5.2.4 填充數組元素... 101
5.2.5 數組的比較... 102
5.3 二維數組... 103
5.3.1 二維數組定義... 103
5.3.2 數組元素的使用... 104
5.3.3 數組初始化器... 105
5.3.4 實例:矩陣乘法... 105
5.3.5 不規則二維數組... 106
5.4 小結... 108
編程練習... 108
第6章 字符串... 111
6.1 String類... 111
6.1.1 創建String類對象... 111
6.1.2 字符串基本操作... 112
6.1.3 字符串查找... 114
6.1.4 字符串轉換為數組... 114
6.1.5 字符串比較... 115
6.1.6 字符串的拆分與組合... 117
6.1.7 String對象的不變性... 118
6.1.8 命令行參數... 118
6.2 格式化輸出... 119
6.3 StringBuilder類和StringBuffer類... 122
6.3.1 創建StringBuilder對象... 122
6.3.2 StringBuilder的訪問和修改... 122
6.3.3 運算符“ ”的重載... 124
6.4 小結... 124
編程練習... 124
第7章 繼承與多態... 126
7.1 類的繼承... 126
7.1.1 類繼承的實現... 126
7.1.2 方法覆蓋... 129
7.1.3 super關鍵字... 130
7.1.4 調用父類的構造方法... 132
7.2 封裝性與訪問修飾符... 133
7.2.1 類的訪問權限... 133
7.2.2 類成員的訪問權限... 134
7.3 防止類擴展和方法覆蓋... 135
7.3.1 final修飾類... 135
7.3.2 final修飾方法... 136
7.3.3 final修飾變量... 136
7.4 抽象類... 137
7.5 對象轉換與多態... 138
7.5.1 對象轉換... 139
7.5.2 instanceof運算符... 140
7.5.3 多態與動態綁定... 140
7.6 小結... 142
編程練習... 142
第8章 Java常用核心類... 144
8.1 Object:終極父類... 144
8.1.1 toString()方法... 145
8.1.2 equals()方法... 145
8.1.3 hashCode()方法... 146
8.1.4 clone()方法... 147
8.1.5 finalize()方法... 148
8.2 Math類... 149
8.3 基本類型包裝類... 151
8.3.1 Character類... 151
8.3.2 Boolean類... 152
8.3.3 創建數值類對象... 153
8.3.4 數值類的常量... 154
8.3.5 自動裝箱與自動拆箱... 155
8.3.6 字符串轉換為基本類型... 156
8.3.7 BigInteger和BigDecimal類... 156
8.4 日期-時間API 158
8.4.1 本地日期類LocalDate. 158
8.4.2 本地時間類LocalTime. 160
8.4.3 本地日期時間類LocalDateTime. 161
8.4.4 Instant類、Duration類和Period類... 162
8.4.5 其他常用類... 164
8.4.6 日期時間解析和格式化... 164
8.5 小結... 166
編程練習... 166
第9章 內部類、枚舉和注解... 168
9.1 內部類... 168
9.1.1 成員內部類... 169
9.1.2 局部內部類... 170
9.1.3 匿名內部類... 171
9.1.4 靜態內部類... 173
9.2 枚舉類型... 175
9.2.1 枚舉類型的定義... 175
9.2.2 枚舉類型的方法... 175
9.2.3 枚舉在switch中的應用... 176
9.2.4 枚舉類型的構造方法... 177
9.3 注解類型... 178
9.3.1 注解概述... 179
9.3.2 標準注解... 179
9.3.3 定義注解類型... 181
9.3.4 標準元注解... 183
9.4 小結... 184
編程練習... 185
第10章 接口與Lambda表達式... 188
10.1 接口... 188
10.1.1 接口定義... 188
10.1.2 接口的實現... 189
10.1.3 接口的繼承... 190
10.1.4 接口類型的使用... 192
10.1.5 常量... 192
10.2 靜態方法和默認方法... 192
10.2.1 靜態方法... 193
10.2.2 默認方法... 193
10.2.3 解決默認方法沖突... 193
10.3 接口示例... 195
10.3.1 Comparable接口... 195
10.3.2 Comparator接口... 197
10.4 Lambda表達式... 198
10.4.1 Lambda表達式簡介... 198
10.4.2 函數式接口... 199
10.4.3 Lambda表達式的語法... 199
10.4.4 預定義的函數式接口... 200
10.4.5 方法引用與構造方法引用... 204
10.5 小結... 206
編程練習... 206