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