本書是講述Java程序設計的教材,在一般知識的基礎上增加了JDK 8中的新功能,包括在接口中聲明靜態方法、默認方法,還有Lambda表達式、方法引用、Stream。在圖形界面部分,去掉了介紹Applet的內容,增加了用JavaFX實現圖形界面的內容及案例。本書由多位長期從事Java教學的教師根據實際授課經驗編寫而成,通過在教學環境中的試用,具有較好的教學效果。本書適合作為普通高等學校教材使用,為了便于學習,本書配有習題解答、電子課件及源程序,在本書附錄中還有相應的授課計劃和實驗項目,為教師備課、授課和安排實驗環節的項目提供參考,為讀者的學習提供引導。
本書由多位長期從事Java教學的教師根據其實際授課經驗編寫,從教師和學生的角度來編寫教材,并在教學環境中加以試用,不斷修改完善。本書配有習題解答、電子課件及源程序。
前言
本書的內容主要來自于為計算機專業本科生授課的講義。本書在正式出版前,經過了兩年的試用,根據試用中的反饋意見對內容進行了不斷的修改和完善。
本書主要介紹Java編程語言的基礎知識,側重實際應用,力求引導學生提高動手編寫程序的能力。本書內容精練,盡量將復雜的問題進行簡化,主要目的是幫助學生克服畏難情緒,提高學習興趣,從而快速入門。在入門之后可以進行自學,對書中某些知識進行補充。書中加星號(*)部分為選學部分,供有一定基礎的讀者學習使用。
要想學會一門編程語言,需要的是動手編程,只看書,不寫程序,即使看無數本書也是學不會一門語言的。正如我們的先輩所說:書上得來終覺淺,絕知此事要躬行。書上的習題以及實驗數量不多,讀者在學習時要自己給自己找問題來編程解決。這些問題完全可以來自生活中。編程語言特別適宜用來解決手工計算的問題,例如高等數學、線性代數、概率與統計中都有很多需要計算的問題,可以試著編程求兩個矩陣相乘,更難的可以用來求矩陣的分解等。學習數據結構時,可以用Java來實現鏈表、鏈式堆棧等,這樣既可以學好基礎知識,又可以學習如何用程序解決實際問題。
在學會Java的基本語法后,繼續學習分為兩個方面: 一是學習使用Java自帶的類庫、第三方提供的類庫;另一個是自己寫類。這兩方面同樣重要。站在巨人的肩上才能看得更高。同樣,每個人遇到的情況都是不一樣的,通用的類庫只能解決共有的問題,無法解決每個人特定的問題。
學習Java有一個非常大的方便,就是有詳細的幫助文檔。如果想學會Java,必須學會使用Java自帶類庫的API文檔。該文檔可以從官方網站上下載。同樣,第三方類庫也提供有API文檔,這些都是極好的參考。大部分的第三方Java類庫都是開源的,包括Java類庫也提供了源代碼(JDK下src.zip中就是),可以同時下載源代碼,從這些源代碼中進行學習。對某一個方法不明白,也可看源代碼。Sun還提供了Java Tutorial,這是Java的教程如何使用類。在有些類的API文檔中有在線教程的鏈接。該教程也可以下載。
這些文檔中,雖然有些有中文版,但是學生在學習時應盡量看英文版,可以同時提高自己的英文水平。目前,大量的資料和比較新的資料都是英文的,直接看英文資料就不用等待翻譯,況且有些資料也根本不會有相應的翻譯。
做事取得的結果取決于熱情、堅持、付出的程度!學編程也是如此!
明天的幸福生活,來自于今天的努力!讓我們攜手共進,繼續創造更美好的生活!
本書由河南工業大學信息科學與工程學院老師編寫,按章節順序,第1、10章由王社偉完成,第2、6、7、8、9、12、13、14章及附錄由劉繼承完成,第3章由韓璐完成,第4、5章由宋敏完成,第11章及實驗由鄭麗萍完成。
在編寫、審校過程中,編著力求敘述清楚、內容正確,如果讀者發現欠妥之處,懇請指正。作者郵箱 ljcyu@163.com(劉繼承),隨時歡迎大家的信件。
編者2018年7月
目錄
第一部分Java程序設計第1章Java入門3
1.1Java簡介3
1.1.1Java的由來3
1.1.2Java的特點4
1.2Java平臺5
1.2.1Java平臺的構成5
1.2.2Java平臺的版本6
1.2.3JRE和JDK7
1.2.4JDK的下載與安裝8
1.2.5環境變量的配置9
1.3Java程序的開發流程10
1.3.1Java程序的種類10
1.3.2Java程序的開發流程10
1.4小試身手11
1.5Java API文檔的使用12
1.6Java Doc文檔13
1.6.1語法13
1.6.2標簽簡介14
1.6.3生成Java Doc文檔15
本章小結16
習題117第2章Java基本語法18
2.1原始類型18
2.1.1整數類型19
2.1.2實數類型21
2.1.3字符類型21
2.1.4布爾類型22
2.1.5強制類型轉換222.2引用類型23
2.3String23
2.4聲明變量23
2.4.1變量的賦值24
2.4.2變量的默認值24
2.4.3常量24
2.4.4變量作用范圍24
2.5命名25
2.6運算符與表達式26
2.6.1算術運算符26
2.6.2關系運算符27
2.6.3邏輯運算符27
2.6.4位運算符29
2.6.5賦值運算符31
2.6.6其他運算符31
2.7數組32
2.7.1一維數組32
2.7.2多維數組33
本章小結35
習題235第3章流程控制36
3.1分支語句36
3.1.1if…else語句36
3.1.2switch語句38
3.2循環語句40
3.2.1while語句40
3.2.2do…while語句41
3.2.3for語句42
3.2.4for…each語句43
3.2.5嵌套循環44
3.2.6循環語句對比45
3.3跳轉語句45
3.3.1break語句45
3.3.2continue語句47
3.3.3return語句48
本章小結49
習題349第4章面向對象編程51
4.1面向對象編程概述51
4.2類的定義52
4.2.1類的基本結構52
4.2.2成員變量和局部變量54
4.2.3成員方法55
4.2.4Overloading62
4.2.5構造方法63
4.2.6this65
4.3對象66
4.3.1對象的創建66
4.3.2對象的使用68
4.3.3對象的清除*68
4.4static69
4.4.1類變量69
4.4.2類方法71
4.4.3靜態語句塊71
4.5包*72
4.5.1包的定義73
4.5.2編譯和運行包中的類73
4.5.3import語句75
4.6訪問權限修飾符76
4.6.1private76
4.6.2friendly77
4.6.3protected77
4.6.4public78
4.7常用類78
4.7.1Object類79
4.7.2String類與StringBuffer類80
4.7.3數值包裝類83
4.7.4Math類85
4.7.5Random類*86
4.7.6處理日期的類*87
4.7.7Arrays類89
本章小結91
習題491第5章繼承93
5.1繼承的語法93
5.2成員變量的隱藏和方法的覆蓋94
5.3super95
5.4final96
5.5多態97
5.6繼承與組合99
5.7初始化順序*102
本章小結105
習題5105第6章抽象類、接口和內部類106
6.1抽象類106
6.1.1聲明抽象類106
6.1.2繼承抽象類106
6.1.3抽象類的應用106
6.2接口109
6.2.1聲明接口109
6.2.2實現接口110
6.2.3default方法和static方法110
6.3內部類111
6.3.1什么是內部類111
6.3.2匿名內部類112
6.4Lambda表達式114
6.4.1定義114
6.4.2常見函數式接口116
6.4.3方法引用116
本章小結117
習題6117第7章枚舉*118
本章小結120
習題7120第8章異常121
8.1異常121
8.1.1異常信息121
8.1.2異常的處理122
8.1.3異常的類型124
8.2finally124
8.3throws125
8.4自定義異常*125
8.5異常進一步的處理126
8.5.1在何處處理異常126
8.5.2同時處理父、子類異常127
8.5.3同時處理多個異常128
本章小結129
習題8129第9章輸入輸出130
9.1File130
9.1.1創建一個File對象130
9.1.2訪問File對象的方法131
9.1.3列出目錄下的文件132
9.1.4列出目錄下滿足條件的文件132
9.1.5Path135
9.2輸入流136
9.2.1字節輸入流136
9.2.2try…with…resources語句141
9.2.3字符輸入流141
9.2.4Scanner145
9.2.5從控制臺輸入147
9.3輸出流150
9.3.1字節輸出流151
9.3.2字符輸出流154
9.3.3格式化輸出156
9.4數字字節輸入輸出流157
9.4.1DataInputStream和DataOutputStream157
9.4.2RandomAccessFile*158
9.5對象輸入輸出流*160
9.6壓縮、解壓縮流*161
9.6.1壓縮162
9.6.2解壓縮163
9.7讀寫Excel文件*164
9.7.1讀取已有的工作簿164
9.7.2生成新的工作簿166
9.7.3修改已有的工作簿168
9.7.4應用168
9.8Files工具類171
本章小結172
習題9172第10章圖形用戶界面174
10.1AWT包與Swing包174
10.1.1輔助類176
10.1.2組件類176
10.1.3容器類176
10.2版面布局管理器180
10.2.1FlowLayout181
10.2.2BorderLayout182
10.2.3GridLayout184
10.2.4CardLayout*185
10.2.5無布局管理器186
10.3事件處理187
10.3.1事件處理機制187
10.3.2事件處理示例190
10.3.3事件適配器196
10.4Swing常用組件198
10.4.1標簽198
10.4.2按鈕199
10.4.3文本框203
10.4.4文本區205
10.4.5列表*205
10.4.6組合框*206
10.4.7對話框*211
10.4.8計時器*215
10.4.9菜單組件*215
10.5Swing組件應用217
10.5.1圖片瀏覽器217
10.5.2文本編輯器221
本章小結226
習題10226第11章JavaFX227
11.1JavaFX概述227
11.1.1JavaFX的發展227
11.1.2JavaFX架構圖227
11.2JavaFX程序228
11.2.1場景Scene228
11.2.2JavaFX應用程序的生命周期228
11.2.3JavaFX應用程序228
11.3Java FX布局229
11.3.1FlowPane229
11.3.2BorderPane230
11.3.3HBox232
11.3.4VBox233
11.3.5GridPane235
11.3.6StackPane236
11.4事件處理237
11.4.1事件238
11.4.2事件分發流程239
11.4.3事件處理240
11.5JavaFX UI組件247
11.5.1標簽247
11.5.2按鈕247
11.5.3文本框249
11.5.4文本區249
11.5.5菜單組件251
11.5.6文件選擇器253
11.6在UI控件上使用CSS257
11.6.1創建樣式257
11.6.2JavaFX CSS選擇器257
11.6.3美化UI控件258
11.6.4使用setStyle()方法設置樣式260
本章小結260
習題11260第12章JDBC261
12.1驅動程序下載262
12.2創建到數據庫的連接262
12.3使用Statement執行SQL語句263
12.3.1executeUpdate263
12.3.2executeQuery266
12.4使用PreparedStatement執行SQL語句267
12.4.1executeUpdate267
12.4.2executeQuery269
12.5事務*269
12.6得到ResultSet中的記錄數*272
12.6.1執行另一條SQL語句272
12.6.2操作游標272
12.7驗證登錄*273
本章小結274
習題12274第13章集合類*275
13.1用Java實現一個鏈式堆棧276
13.2List277
13.2.1自動包裝和解包279
13.2.2Stack280
13.3Set281
13.3.1SortedSet282
13.3.2equals()、hashCode()和Comparable283
13.3.3Comparator285
13.4Map286
13.4.1SortedMap289
13.4.2Properties289
13.5Stream292
13.5.1什么是Stream292
13.5.2常用方法292
本章小結294
習題13294第14章Java相關框架*295
14.1Spring295
14.1.1DI295
14.1.2JDBC297
14.1.3事務支持302
14.2Hibernate305
本章小結309
習題14310第二部分實驗實驗ⅠJDK安裝、配置及Java程序的編譯和運行313實驗ⅡJava基本語法313實驗ⅢJava的類繼承機制、接口314實驗ⅣJava的輸入機制315實驗ⅤJava的輸出機制315實驗Ⅵ綜合性程序設計簡單學生信息管理系統(序列化版)*316實驗Ⅶ綜合性程序設計簡單學生信息管理系統(GUI版)317實驗Ⅷ綜合性程序設計簡單學生信息管理系統(數據庫版)318實驗Ⅸ綜合性程序設計簡單學生信息管理系統(集合版)*319附錄附錄A進行輸入和輸出323附錄BSQL語句簡單介紹325
B.1Java中數據類型和SQL類型的對應關系325
B.2SQL中對表的操作325
B.3SQL中對表中記錄的操作325附錄CHsqldb使用指南328
C.1啟動Hsqldb數據庫服務器328
C.2用圖形界面管理Hsqldb數據庫服務器328
C.3編譯、運行JDBC程序329
C.4幾個SQL語句的例子329
C.5幾個JDBC的例子330附錄D連接SQL Server 2016 Express數據庫341附錄EEclipse使用指南343
E.1設置Workspace目錄343
E.2建立工程344
E.3編輯、編譯、運行Java類345
E.4調試349
E.5在工程中使用第三方類庫350
E.6使用技巧352附錄F使用Ant354
F.1下載、設置354
F.2定義property、target355
F.3編譯、運行Java程序356
F.4打包Java程序357
F.5啟動、管理、停止Hsqldb數據庫服務器357
F.6備份358
F.7在Eclipse使用Ant358附錄G授課計劃和方法359參考文獻364