本書不僅介紹了Java的基本語法規(guī)則,還將J2SE平臺提供的功能融合進來,著重介紹在此平臺上如何編寫有實際用途的程序,培養(yǎng)學生良好的編程習慣,提高學生的工程應(yīng)用能力。本書在章節(jié)組織中以快速帶領(lǐng)讀者進入工程編程領(lǐng)域為目標。在編程工具的選擇上,介紹了目前主流且免費的開發(fā)工具:VS Code。在介紹完Java基礎(chǔ)的語法知識之后,立即開始介紹Java中的常用工具類,包括數(shù)組、字符串、數(shù)學類、系統(tǒng)類等。學完這一部分,讀者已經(jīng)可以編寫有一定實用價值的程序了。在介紹完面向?qū)ο蟮母呒壧匦灾,著重介紹了在工程開發(fā)中經(jīng)常會遇見的一些問題,如字符編碼的轉(zhuǎn)換問題、文件的內(nèi)容和屬性的處理問題。在多線程章節(jié)中,著重介紹了線程的互斥和同步處理方法,這也是工程編程中的難點問題。整本教材中提供了大量的編程實例,大多數(shù)問題都以程序代碼來講解,代碼編寫遵循工程編程規(guī)范,充分體現(xiàn)了“talk is cheap, show me the code”的精神。
劉新,副教授,計算機專業(yè),已在清華大學出版社(2009)、浙江大學出版社(2012)、機械工業(yè)出版社出版(2017)Java教材,均為獨著或者主編。
第?1?章 入門準備
1.1 Java?的運行環(huán)境與虛擬機
1.2 Java?的開發(fā)環(huán)境
1.2.1 JDK的安裝
1.2.2 設(shè)置系統(tǒng)環(huán)境變量
1.2.3 編寫一個簡單的Java?應(yīng)用程序
1.2.4 編譯命令的使用
1.2.5 解釋執(zhí)行命令的使用
1.3 配置VS Code?集成開發(fā)工具
第?2?章 編程初探
2.1 Java?語言概述
2.1.1 Java?語言特點
2.1.2 Java?程序的構(gòu)成
2.1.3 程序文本風格
2.2 數(shù)據(jù)及類型轉(zhuǎn)換
2.2.1 基本數(shù)據(jù)類型
2.2.2 常量
2.2.3 變量
2.2.4 數(shù)據(jù)類型轉(zhuǎn)換
2.3 運算符與表達式
2.3.1 算術(shù)運算符和算術(shù)表達式
2.3.2 關(guān)系運算符和關(guān)系表達式
2.3.3 邏輯運算符和邏輯表達式
2.3.4 條件運算符和條件表達式
2.3.5 位運算符和位運算表達式
2.3.6 賦值運算符和賦值表達式
2.3.7 表達式的求值順序
2.4 流程控制語句
2.4.1 順序語句
2.4.2 分支語句
2.4.3 循環(huán)語句
2.5 控制臺輸入和輸出
2.5.1 控制臺輸入類Scanner
2.5.2 格式化輸出?printf
2.6 應(yīng)用實例
2.6.1 求最大公約數(shù)和最小公倍數(shù)
2.6.2 Fibonacci?數(shù)列
2.6.3 拆分數(shù)字和進制轉(zhuǎn)換
2.6.4 輸出九九口訣表
第?3?章 面向?qū)ο笕腴T
3.1 面向?qū)ο蟮幕靖拍?br>3.1.1 對象
3.1.2 類
3.1.3 消息
3.1.4 面向?qū)ο蟮?4?個基本特征
3.2 類與對象
3.2.1 類的聲明和定義
3.2.2 對象的使用
3.3 成員變量
3.3.1 成員變量的定義
3.3.2 成員變量的訪問權(quán)限
3.3.3 實例成員變量和靜態(tài)成員變量
3.4 成員方法
3.4.1 方法的聲明和定義
3.4.2 方法的調(diào)用
3.4.3 隱含參數(shù)?this
3.5 構(gòu)造方法
3.5.1 無參數(shù)構(gòu)造方法的定義和使用
3.5.2 帶參數(shù)構(gòu)造方法的定義和使用
3.5.3 this?關(guān)鍵字和構(gòu)造方法的調(diào)用
3.6 靜態(tài)方法
3.6.1 靜態(tài)方法的聲明和定義
3.6.2 靜態(tài)方法和實例方法的區(qū)別
3.6.3 靜態(tài)代碼塊
3.6.4 再論靜態(tài)成員變量
3.7 main()方法和命令行參數(shù)
3.8 編程實例:學生類示例
第?4?章 常用工具類
4.1 數(shù)組
4.1.1 一維數(shù)組
4.1.2 for-each?循環(huán)
4.1.3 二維數(shù)組
4.1.4 編程實例?1:數(shù)組排序
4.1.5 編程實例?2:楊輝三角
4.2 字符串
4.2.1 String?對象
4.2.2 StringBuffer?對象
4.2.3 編程實例?3:字符串排序
4.3 Runtime?類
4.3.1 內(nèi)存管理
4.3.2 執(zhí)行其他程序
4.4 System?類
4.4.1 利用?currentTimeMillis()記錄程序執(zhí)行的時間
4.4.2 利用?exit()退出虛擬機
4.4.3 獲取環(huán)境屬性
4.5 Math?類
4.5.1 利用隨機數(shù)求π值
4.5.2 利用三角函數(shù)求π值
4.5.3 指數(shù)和對數(shù)函數(shù)
4.5.4 取整函數(shù)
4.6 Random?類的使用
4.7 日歷類
4.7.1 Date?類的使用
4.7.2 使用SimpleDateFormat?格式化輸出時間
4.7.3 Calendar?類的特色
4.7.4 編程實例?4:利用GregorianCalendar?輸出日歷
4.7.5 JSR日期時間包
4.8 Formatter?類
4.8.1 Formatter?的簡單使用
4.8.2 時間格式轉(zhuǎn)換符詳解
4.8.3 格式說明符語法圖
4.9 類型包裝器
第?5?章 面向?qū)ο蟾呒壧匦?br>5.1 繼承的基本原理
5.2 子類對父類的繼承
5.3 繼承機制
5.3.1 屬性的隱藏
5.3.2 方法的覆蓋
5.3.3 構(gòu)造方法沒有繼承機制
5.3.4 父類變量引用子類對象
5.3.5 繼承的內(nèi)部處理
5.4 super?關(guān)鍵字
5.4.1 用?super?引用父類的成員
5.4.2 使用?super?調(diào)用父類的構(gòu)造方法
5.5 接口與多重繼承
5.5.1 接口的定義
5.5.2 接口的繼承
5.5.3 接口的實現(xiàn)
5.6 重載
5.6.1 普通方法的重載
5.6.2 構(gòu)造方法的重載
5.6.3 重載的解析
5.6.4 重載與覆蓋的區(qū)別
5.7 運行時多態(tài)
5.7.1 實例方法的運行時多態(tài)
5.7.2 成員變量運行時的表現(xiàn)
5.7.3 靜態(tài)方法運行時的表現(xiàn)
5.8 編程實例:圖形類示例
第?6?章 包和特殊類
6.1 包
6.1.1 包的創(chuàng)建
6.1.2 包的使用
6.1.3 JAR文件的創(chuàng)建和使用
6.1.4 JDK中的常用包
6.2 抽象類與抽象方法
6.2.1 抽象方法的聲明
6.2.2 抽象類的定義
6.2.3 抽象方法與回調(diào)函數(shù)
6.3 最終類與最終方法
6.4 內(nèi)部類
6.4.1 內(nèi)部類的定義
6.4.2 內(nèi)部類訪問外部類的成員
6.4.3 內(nèi)部類之間的相互使用
6.4.4 在外部使用內(nèi)部類
6.4.5 匿名內(nèi)部類
6.4.6 內(nèi)部類的作用
第?7?章 異常處理機制
7.1 異常機制簡介
7.1.1 基本概念
7.1.2 異常處理的作用
7.1.3 Java?的異常處理機制
7.1.4 異常類的層次結(jié)構(gòu)
7.2 異常處理類型
7.2.1 運行時異常
7.2.2 檢查型異常
7.2.3 自定義異常
7.3 異常處理機制
7.3.1 捕獲和處理異常
7.3.2 拋出異常
7.3.3 try-catch-finally?語句的嵌套
7.3.4 try-with-resource?語句
7.3.5 用戶自定義異常
7.4 編程實例:使用異常機制來實現(xiàn)鍵盤輸入
第?8?章 文件處理
8.1 文件和輸入/輸出流
8.2 字節(jié)流
8.2.1 InputStream?中的方法
8.2.2 OutputStream?中的方法
8.2.3 文件輸入流FileInputStream
8.2.4 文件輸出流FileOutputStream
8.2.5 編程實例?1:保存用戶輸入到文件
8.2.6 編程實例?2:顯示文件內(nèi)容
8.2.7 編程實例?3:文件的復制
8.2.8 順序輸入流
8.2.9 管道輸入流
8.2.10 過濾輸入/輸出流
8.3 字符流
8.3.1 InputStreamReader?類中的方法
8.3.2 OutputStreamWriter?類中的方法
8.3.3 編程實例?4:保存鍵盤輸入中文到文件
8.3.4 編程實例?5:文件編碼轉(zhuǎn)換
8.4 文件屬性處理
8.4.1 File?類中的方法
8.4.2 編程實例?6:文件列表
8.5 隨機訪問文件
8.5.1 RandomAccessFile?類中的方法
8.5.2 編程實例?7:文件加密
8.6 序列化
第?9?章 多線程
9.1 線程的概念
9.1.1 多線程的特點
9.1.2 線程的狀態(tài)
9.2 Thread?類
9.2.1 Thread?類的構(gòu)造方法
9.2.2 Thread?類的常用方法
9.3 多線程程序的編寫
9.3.1 利用Thread?的子類創(chuàng)建線程
9.3.2 實現(xiàn)Runnable?接口創(chuàng)建線程
9.3.3 使用?isAlive()和?join()等待子線程結(jié)束
9.3.4 設(shè)置線程優(yōu)先級
9.4 線程的通信與協(xié)調(diào)
9.4.1 線程的互斥
9.4.2 線程的同步
9.4.3 暫停、恢復和停止線程
9.4.4 編程實例:生產(chǎn)者-消費者問題
9.5 利用Lock?接口實現(xiàn)線程互斥
第?10?章 網(wǎng)絡(luò)程序設(shè)計
10.1 與網(wǎng)絡(luò)相關(guān)的常用術(shù)語
10.2 InetAddress?類使用示例
10.2.1 編程實例?1:根據(jù)域名查找IP地址
10.3 URL類和URLConnection?類的使用
10.3.1 編程實例?2:用URL類實現(xiàn)一個簡單的瀏覽器
10.3.2 編程實例?3:用URLConnection?類實現(xiàn)文件下載
10.4 Socket?的使用
10.4.1 客戶端創(chuàng)建Socket?對象
10.4.2 服務(wù)器端創(chuàng)建ServerSocket?對象
10.4.3 編程實例?4:一對一的通信
10.4.4 編程實例?5:一對多的通信
10.4.5 編程實例?6:簡單的聊天程序
10.5 UDP數(shù)據(jù)報通信
10.5.1 DatagramSocket?的使用方法
10.5.2 DatagramPacket?的使用方法
10.5.3 編程實例?7:用UDP實現(xiàn)的聊天程序
第?11?章* 運行時類型識別
11.1 RTTI的作用
11.2 用Class?類來加載對象
11.3 使用?getClass()方法獲取類信息
11.4 使用類標記
11.5 使用關(guān)鍵字?instanceof?判斷所屬類
11.6 利用反射獲取運行時類信息
11.6.1 使用?isInstance()方法判斷所屬類
11.6.2 獲取成員方法信息
11.6.3 獲取構(gòu)造方法信息
11.6.4 獲取類的成員屬性
11.6.5 根據(jù)方法的名稱來執(zhí)行方法
11.6.6 創(chuàng)建新的對象
11.6.7 改變屬性的值
11.6.8 使用數(shù)組
第?12?章* 泛型
12.1 泛型概述
12.1.1 編程實例?1:一個關(guān)于泛型的簡單例子
12.1.2 編程實例?2:帶兩個類型參數(shù)的泛型類
12.2 泛型的基礎(chǔ)知識
12.2.1 有界類型
12.2.2 通配符參數(shù)
12.2.3 泛型方法
12.2.4 泛型接口
12.3 泛型類的繼承
12.3.1 以泛型類為父類
12.3.2 以非泛型類為父類
12.3.3 運行時類型識別
12.3.4 強制類型轉(zhuǎn)換
12.3.5 繼承規(guī)則
12.4 泛型的本質(zhì)
12.4.1 擦拭
12.4.2 擦拭帶來的錯誤
12.5 泛型的局限
12.5.1 不能使用基本類型
12.5.2 不能使用泛型類異常
12.5.3 不能使用泛型數(shù)組
12.5.4 不能實例化參數(shù)類型對象
第?13?章* 集合
13.1 集合接口與抽象類
13.1.1 Collection?接口
13.1.2 Iterator?接口
13.1.3 AbstractCollection?抽象類
13.1.4 幾個常用術(shù)語
13.2 集合類的使用
13.2.1 順序表(ArrayList)使用示例
13.2.2 鏈表(LinkedList)使用示例
13.2.3 優(yōu)先隊列(PriorityQueue)使用示例
13.2.4 哈希集合(HashSet)使用示例
13.2.5 哈希映射類(HashMap)使用示例
13.2.6 有序樹(TreeSet)使用示例
13.2.7 有序樹映射類(TreeMap)使用示例
13.3 常用算法
13.3.1 Collections?中的簡單算法
13.3.2 排序
13.3.3 二分查找
13.4 遺留的類和接口
13.4.1 Enumeration?接口簡介
13.4.2 向量類(Vector)簡介
13.4.3 棧(Stack)使用示例
13.4.4 字典(Dictionary)簡介
13.4.5 哈希表(Hashtable)簡介