Java高手是怎样炼成的:原理、方法与实践

Java高手是怎样炼成的:原理、方法与实践"

作者:高永强卢晨
ISBN:9787302563846
定价:¥118
字数:千字
页数:
出版时间:2021.01.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

《Java高手是怎样炼成的:原理、方法与实践》是作者20多年工作经验的结晶。内容由浅入深,循序渐进,通过500多个简单易懂、可运行的完整实例,帮助读者理解Java编程的逻辑、概念及实操。本书内容丰富,讲解接地气,从理论到实践,从基础到高级,帮助读者建立学习信心,在实践中学会Java编程。

《Java高手是怎样炼成的:原理、方法与实践》分五部分,共23章。第一部分(第1~5章)主要介绍Java基本语法,包括Java语言概述和发展、编程和开发环境及设置等。第二部分(第6~9章)通过生动实例介绍类、对象、继承、多态、内部类以及接口等Java编程概念和技术。第三部分(第10~15章)走进数组和字符串,深入讲解它们的应用、异常处理,并深入讨论更多面向对象技术。第四部分(第16~20章)介绍20多种GUI组件、字体、颜色、图像以及音频编程。第五部分(第21~23章)详细讲解数据流、文件I/O、数据库编程以及网络编程等。

《Java高手是怎样炼成的:原理、方法与实践》专为不同层次的Java程序员精心编写,既适合编程初学者入门,又适合程序员进阶,还可以作为高等院校讲授面向对象程序设计语言以及Java语言的参考教材。

前言

  序言

  

  Java是世界上第一个100%不依赖操作系统平台、面向对象的编程语言。在从发布、发展到成熟、壮大的20多年里,Java如同一颗冉冉升起的耀眼明星,迅速超越C和C++,独占鳌头,成为软件开发最广泛应用的编程语言之一。恭贺你选择了Java,感谢你翻开这本书,它可以作为启迪你Java编程概念的向导、打开通往Java技术宝库的“金钥匙”。这无疑会使你与Java结下不解之缘,成为掌握和拥有Java技术大家庭中的一员。

  Java语言包括广泛的应用技术和应用领域。从应用技术或软件包来说,它包括Java标准版本软件包Java SE、Java企业版本软件包Java EE,以及Java微型版本Java ME。从软件开发及应用领域来说,它包括桌面应用编程、Web客户端编程、服务器编程、移动设备(如手机)编程以及机器人编程等。虽然本书专门介绍Java标准版本的编程概念和技术,但它是学习其他Java技术的基础。学好了本书中介绍和讨论的Java编程概念和技术,掌握其他Java技术就不难了。

  那么怎样写好这本书,使读者在合上这本书的时候爱不释手,有继续学下去的欲望;当读者学完这本书的时候,会由衷地说,这本书没有白买,它物超所值,是值得拥有的一本好书呢?

  为此,我严格遵循下面的写作思想:

  第一,作者必须是读者。这是我多年从事写作的经验之谈。我在写本书的时候,总是在不断地设身处地问自己:在介绍Java编程的众多书中,读者为什么要买你写的书?如果我是读者,会买它吗?回想起我在初学Java的时候,每遇到一个难懂的Java概念编程技术,总是会问:什么是问题所在(What)?为什么会这样(Why)?怎样解决它(How)?我在这本书的写作大纲、章节安排以及内容编排上是按照这样一个3W作为主线,使它成为读者学习Java编程的良师益友。

  第二,作者不仅仅是读者。作者必须把握读者的心理,知道读者在学习过程中的难点。我们经常说难者不会,会者不难。我常常问自己:为什么学会了就不难了呢?究根寻源,本来问题就不难,是没有讲清楚、没有写清楚,把概念和技术越说越玄、越写越深奥,如同不会画画,越描越黑。所以我写作的原则是:自己没有搞懂的概念和技术,绝不写,否则一定会误人子弟。懂了就觉得简单了,才会把难的东西写得简单易懂,读者才会受益。

  第三,没有实际应用和教学经验的概念和技术,绝不把它写进书里。我是从1996年,即Java正式发布的时候,开始自学Java,并且从事Java教学的。我所在的大学地处美国硅谷,是Java和许多计算机软硬件技术的诞生地。创建Java语言的Sun Microsystems以及收购了它的甲骨文公司(Oracle)就离我的居所十几分钟的车程。我几乎每年都参加JavaOne国际会议,聆听Java领军人物的演讲,参加介绍Java新技术的讲座和培训以及参观所有Java伙伴公司的展厅,收集有关Java软件开发的资料,充实自己的知识。这些经验无疑有益地帮助我完成本书的写作。

  第四,以实例和实战项目为主导解释编程概念和难点,我认为这是学习任何编程语言的特点。我在《全C编程》《微型计算机应用用户指南》等书以及我的教学实践中始终把握这个特点,读者和学生受益匪浅,反映甚佳。市面上流行的一些编程书中也会列举大量的例子,但许多只是程序代码片段,或者是读者不能编译执行的程序。我认为这不是真正意义上的通过实例来学习编程。在我的书中500多个实例都是完整的程序,都可以编译和执行。这样不仅可以压缩书的厚度、降低图书价格,还有其他两个好处:读者在学习书中的举例时,可以抓住重点;在深化理解和掌握消化时,可以看到程序的全貌和各个部分的关系。

  第五,学习编程关键在于动手。心动不如行动,光看书是学不会Java的。“要想知道梨子的滋味,必须亲口尝尝。”编程是实践性很强的艺术,我在20多年的教学中,看到许多学生上课认真听讲、专心记笔记;下课用心看书,逐字逐段抠书本,但却忽视了实践环节,缺乏动手能力,为什么?因为做练习太少,上机编写程序太少,分析并修改程序例子太少。针对这个特点,我在教学中注重强调练习、实践、分析、修改、提高、巩固这几个环节。许多编程书籍往往没有练习题部分。我觉得这是十分遗憾或美中不足的事。练习题不仅要有,而且应该涵盖章节中讨论过的所有重要编程概念和技术,引导、鼓励、督促读者勇于实践并且善于实践。

  本书就是在以上原则和宗旨的指导下,积累我20多年Java教学和实践经验以及20多年程序设计教学生涯的基础上写成的。

  本书分为五部分,共23章。

  第一部分 新手上路,共5章:第1章介绍Java的基础知识,第2章介绍Java编程相关的内容,第3章讨论新手须知的类和对象,第4章阐述控制语句相关知识,第5章介绍数据控制和质量保证的基础内容,引导初学者为学习Java编程打好基础。

  第二部分 告别菜鸟,共4章:第6章详细介绍类和对象,第7章讨论了继承,第8章介绍多态的用法,第9章阐述接口相关内容,主要讨论面向对象编程的本质概念和技术。

  第三部分 Java提高,共6章:第10章细谈数组,第11章深入介绍字符串,第12章揭秘异常处理,第13章介绍高手掌握的更多OOP技术,第14章介绍高手须知的集合类,第15章阐述多线程相关内容,深入介绍Java的其他重要编程概念和技术。

  第四部分 GUI和多媒体编程,共5章:第16章介绍GUI相关内容,第17章介绍GUI组件布局——安排组件位置和显示风格,第18章说明更多组件和事件处理,第19章揭秘事件处理那些事儿,第20章介绍多媒体编程,引导读者走进Java,包括图形、图像、字体、颜色以及音频播放等多媒体编程世界。

  第五部分 高手进阶——数据流处理和编程,共3章:第21章介绍文件I/O,第22章说明数据库编程,第23章阐述网络编程,使读者成为Java编程和实战项目开发技术的高手。

  我们诚心将这本书献给热衷于Java编程的读者。让我们在Java的广袤天地间,为了解Java真相、掌握Java技术,勇于探索和实践。

目录

目  录

第一部分 新手上路

第1章 初识Java ·································2

1.1 什么是Java ················································2

1.2 Java能做什么 ············································3

1.3 Java软件包 ················································3

1.3.1 什么是Java SE ···································3

1.3.2 什么是JDK ·········································4

1.4 为什么Java可以在任何计算机上运行 ····4

1.5 Java和其他语言比较 ································4

1.5.1 Java和C++的比较 ····························5

1.5.2 Java和C#的比较 ······························5

1.6 为什么学Java ············································5

1.6.1 新手常遇到的困难 ·····························5

1.6.2 为什么选择这本书 ·····························6

1.7 免费下载、安装和测试学习Java需要的软件 ············6

1.7.1 免费下载JDK软件包 ························7

1.7.2 JDK的安装步骤 ·································7

1.7.3 安装成功我知道 ·································8

1.8 新手使用Java开发工具Eclipse ············10

1.8.1 什么是IDE········································10

1.8.2 为什么用Eclipse ······························10

1.8.3 免费下载、安装和测试Eclipse ······11

1.8.4 新手须知Eclipse常用功能 ·············14

1.9 编写和运行第一个Java程序 ·················17

1.10 什么是Java API ······································19

巩固提高练习和编程实践 ·······························19

第2章 开始Java编程 ························20

2.1 一切从基础开始 ······································20

2.1.1 Java语句 ···········································20

2.1.2 注释,还是注释 ·······························21

2.1.3 什么是标识符和怎样使用 ···············22

2.2 Java基本数据 ··········································23

2.2.1 8种基本数据类型 ····························23

2.2.2 如何定义变量 ···································24

2.2.3 什么是变量初始化 ···························25

2.2.4 变量与存储器有什么关系 ···············26

2.2.5 常量必须初始化 ·······························27

2.3 赋值语句 ··················································27

2.3.1 算术表达式 ·······································27

2.3.2 快捷赋值操作符 ·······························29

2.4 初识字符串 ··············································30

2.4.1 菜鸟理解字符串 ·······························30

2.4.2 什么是字符串引用 ···························31

2.4.3 如何实现字符串连接 ·······················31

2.4.4 如何处理特殊字符——转义符 ·······33

2.5 初识数组 ··················································34

2.5.1 菜鸟理解数组 ···································34

2.5.2 一个例子教会你使用数组 ···············34

巩固提高练习和编程实践 ·······························35

第3章 新手须知类和对象 ····················37

3.1 初识类和对象 ··········································37

3.1.1 类到底是什么 ···································37

3.1.2 对象又是什么 ···································38

3.1.3 编写你的第一个类 ···························38

3.1.4 创建你的第一个对象 ·······················40

3.1.5 怎样调用方法 ···································41

3.1.6 怎样测试自己编写的类 ···················41

3.1.7 站在巨人的肩膀——使用API类 ············43

3.1.8 给程序带来五彩缤纷——细说JOptionPane ·········45

3.2 学习更多输入、输出API类 ·················48

3.2.1 回到黑白——System.out ·················49

3.2.2 扫描输入——Scanner ······················50

3.3 编写用户友好与人机互动程序 ··············52

实战项目:里程转换应用开发 ·······················53

巩固提高练习和实战项目大练兵 ···················55

第4章 走进控制语句 ··························57

4.1 条件表达式 ··············································57

4.1.1 关系表达式 ·······································57

4.1.2 比较基本型数据 ·······························58

4.1.3 比较字符串 ·······································59

4.2 逻辑表达式和应用 ··································61

4.2.1 逻辑表 ···············································61

4.2.2 复合表达式及运算次序 ···················61

4.2.3 你的程序逻辑清楚吗 ·······················62

4.3 简单if语句 ·············································63

4.4 简单if-else语句 ······································65

4.5 嵌套if-else语句 ······································67

4.5.1 用多种格式编写 ·······························67

4.5.2 应用实例 ···········································68

4.6 条件运算符?: ··········································69

4.7 多项选择——switch语句 ······················69

4.7.1 典型switch语句格式 ·······················69

4.7.2 应用实例 ···········································71

4.7.3 JDK14新增的switch-case语句及其应用 ········72

4.8 你的程序需要继续运行吗——循环语句 ················72

4.8.1 走进while循环 ································72

4.8.2 走进do-while循环 ···························75

4.8.3 走进for循环·····································77

4.8.4 走进嵌套循环 ···································79

4.9 更多控制语句 ··········································81

4.9.1 break语句 ·········································81

4.9.2 continue语句 ····································82

实战项目:投资回报应用开发(1) ···············83

巩固提高练习和实战项目大练兵 ···················86

第5章 数据控制和质量保证初探 ···········89

5.1 垃圾进、垃圾出——誓将错误消灭在开始 ··········89

5.2 Java的异常处理 ······································90

5.2.1 系统自动抛出的异常 ·······················90

5.2.2 初识try-catch ····································90

5.2.3 API标准异常类 ································92

5.2.4 怎样处理系统自动抛出的异常 ·······92

5.2.5 为什么需要抛出和处理异常 ···········93

5.2.6 异常处理应用实例 ···························95

5.3 格式化输出控制 ······································98

5.3.1 货币输出格式化 ·······························98

5.3.2 国际货币输出格式化 ·······················99

5.3.3 百分比输出格式化 ·························100

5.3.4 其他数值输出格式化 ·····················101

5.3.5 利用DecimalFormat控制数值输出格式化 ·······102

5.4 数据类型转换 ········································102

5.4.1 自动类型转换 ·································103

5.4.2 强制性类型转换cast ······················103

5.5 怎样利用Math类 ·································104

5.6 处理超值数字——BigDecimal类 ·······105

5.6.1 BigDecimal的数学运算 ·················106

5.6.2 BigDecimal的格式化输出 ·············107

实战项目:投资回报应用开发(2) ·············108

巩固提高练习和实战项目大练兵 ·················110

第二部分 告别菜鸟

第6章 走进类和对象 ·························114

6.1 面向对象编程——原来如此 ················114

6.1.1 类和对象剖析——源于生活,高于生活 ·········115

6.1.2 封装性 ·············································115

6.1.3 继承性 ·············································116

6.1.4 多态性 ·············································117

6.1.5 抽象性 ·············································117

6.2 类为什么是编程模块 ····························117

6.2.1 类就是软件工厂产品蓝图 ·············117

6.2.2 如何描述对象——确定其属性并赋值 ···········118

6.2.3 构造方法制造对象 ·························119

6.2.4 更灵活地制造对象——构造方法重载 ··············121

6.3 走进方法 ················································122

6.3.1 方法就是对象的具体操作 ·············122

6.3.2 什么是传递值的参数和传递引用的参数 ············123

6.3.3 方法重载 ·········································125

6.3.4 this是什么意思 ······························126

6.4 走进静态数据 ········································129

6.4.1 属于全体对象的数据就是静态数据 ··················129

6.4.2 静态数据是怎样工作的 ·················130

6.4.3 应用静态数据原则 ·························130

6.5 走进静态方法 ········································131

6.5.1 有静态数据就有静态方法——此话有理 ···········131

6.5.2 静态方法怎样工作——不同于一般方法 ················132

6.5.3 为什么要用静态初始化程序块 ·····133

6.6 我们喜欢再谈对象 ································134

6.6.1 对象创建与对象引用 ·····················134

6.6.2 为什么对象名重用 ·························135

6.6.3 方法链式调用就这么简单 ·············136

实战项目:投资回报应用开发(3) ·············136

巩固提高练习和实战项目大练兵 ·················138

第7章 继承 ·····································140

7.1 继承就是吃现成饭 ································140

7.1.1 怎样实现继承——归类分析 ·········141

7.1.2 怎样确定继承是否合理—— “是”和“有”关系 ············142

7.1.3 怎样体现代码重用 ·························142

7.1.4 继承就是站在巨人肩膀上 ·············143

7.1.5 继承好处多多,你都想到了吗 ······143

7.1.6 继承的局限性 ·································143

7.1.7 三种基本继承类型 ·························143

7.2 实现继承 ················································145

7.2.1 怎样写父类 ·····································145

7.2.2 怎样写子类 ·····································146

7.2.3 Like father like son——像爸爸就是儿子 ··············147

7.3 你想让子类怎样继承——访问修饰符再探 ··················148

7.4 更多继承应用 ········································149

7.4.1 继承中如何应用重载 ·····················149

7.4.2 一个实例教会你什么是覆盖 ·········150

7.4.3 一个实例教会你什么是屏蔽 ·········151

7.4.4 细谈万类鼻祖Object和类中类——Class ·············152

7.5 抽象类 ····················································156

7.5.1 抽象类不能创建对象 ·····················156

7.5.2 抽象方法造就了抽象类 ·················156

7.6 最终类 ····················································158

7.6.1 最终类不能被继承 ·························158

7.6.2 一个例子搞懂最终类 ·····················159

7.6.3 最终方法不能被覆盖 ·····················159

7.6.4 最终参数的值不能改变 ·················159

7.6.5 所有这一切皆为提高执行速度 ·····159

实战项目:几何体面积和体积计算应用开发(1) ···········160

巩固提高练习和实战项目大练兵 ·················163

第8章 多态 ·····································165

8.1 我们每天都在用多态 ····························165

8.1.1 多态问题你注意到了吗 ·················165

8.1.2 让我们一起走进多态 ·····················166

8.2 实现多态 ················································168

8.2.1 父类提供多态方法和接口 ·············168

8.2.2 子类覆盖多态方法或完善接口 ······169

8.2.3 一个例子让你明白应用多态 ·········170

8.3 为什么剖析方法绑定 ····························171

8.3.1 静态绑定 ·········································171

8.3.2 动态绑定 ·········································171

8.3.3 绑定时如何处理方法调用 ·············171

8.4 高手特餐——invokespecial和invokevirtual ············172

实战项目:几何体面积和体积计算应用开发(2) ··············173

巩固提高练习和实战项目大练兵 ·················175

第9章 接口 ·····································177

9.1 接口就是没有完成的类 ························177

9.1.1 接口只规定命名——如何完善由你 ················177

9.1.2 接口体现最高形式的抽象 ·············178

9.1.3 怎样编写接口 ·································179

9.1.4 用接口还是用抽象类 ·····················180

9.1.5 常用API接口 ·································181

9.2 实现接口 ················································181

9.2.1 实现接口就是完善接口中的方法 ···············181

9.2.2 利用接口可以实现多重继承 ·········183

9.2.3 接口本身也可以继承 ·····················186

9.2.4 接口也可以作为参数 ·····················187

9.3 应用接口的典型实例——Cloneable接口 ·············188

9.3.1 实现Cloneable接口 ·······················188

9.3.2 引用还是复制——看看这个例子就懂了 ··············189

9.3.3 复制还分深浅——怎么回事 ·········189

9.3.4 应用实例——利用最高超类实现Cloneable接口 ············192

巩固提高练习和实战项目大练兵 ·················193

第三部分 Java提高

第10章 细谈数组 ·····························196

10.1 为啥数组就是类 ··································196

10.1.1 理解数组是怎样工作的 ···············196

10.1.2 创建数组就是创建数组对象 ·······197

10.1.3 揭开数组的内幕 ···························198

10.2 数组的操作 ··········································201

10.2.1 访问数组成员 ·······························201

10.2.2 数组和循环总是闺蜜 ···················203

10.2.3 访问数组成员的特殊循环 ···········203

10.2.4 用更多实例掌握数组的应用 ·······204

10.3 高手要掌握的更多数组技术 ··············205

10.3.1 多维数组 ·······································206

10.3.2 非规则多维数组 ···························208

10.3.3 怎样把数组传到方法 ···················208

10.3.4 怎样在方法中返回数组 ···············210

10.4 API的Arrays类可以做些什么 ··········211

10.4.1 常用方法 ·······································211

10.4.2 排序和搜索 ···································212

10.4.3 数组复制——避免菜鸟常犯的错误 ·················213

10.4.4 高手必须掌握的另一个API接口——Comparable ············215

实战项目:在多级继承中应用数组进行排序 ·····················216

巩固提高练习和实战项目大练兵 ·················218

第11章 为何要再谈字符串 ·················220

11.1 为何字符串也是类 ······························220

11.1.1 什么是字符串引用 ·······················220

11.1.2 什么是字符串创建 ·······················221

11.1.3 字符串构造方法 ···························221

11.1.4 高手必须掌握的字符串方法 ·······222

11.2 API StringBuilder类 ····························225

11.2.1 字符串内容可变还是不可变 ·······225

11.2.2 StringBuilder的构造方法 ·············225

11.2.3 高手必须掌握的其他常用方法 ···············226

11.2.4 用实例学会StringBuilder应该很容易 ·················227

11.2.5 StringBuilder的大哥——StringBuffer类··················229

11.3 API StringTokenizer类——分解字符串·················229

11.3.1 token就是分解字符串的符号 ·····229

11.3.2 构造方法和其他常用方法 ···········230

11.3.3 用实例学会StringTokenizer ·········231

11.4 正则表达式 ··········································231

11.4.1 高手必须知道的正则表达式 ·······231

11.4.2 正则表达式规则 ···························232

11.4.3 不再是秘密——String中处理正则表达式的方法 ·············234

11.4.4 揭开Pattern和Matcher类的面纱 ·····················234

11.4.5 验证身份不是难事——实例说明一切 ·······························236

实战项目:计算器模拟应用开发(1) ·········237

巩固提高练习和实战项目大练兵 ·················239

第12章 揭秘异常处理 ·······················241

12.1 高手必须懂的API异常处理类 ·········241

12.2 非检查性异常 ······································242

12.2.1 出错第一现场在哪里 ···················242

12.2.2 高手为什么要处理非检查性异常 ·····················242

12.3 检查性异常 ··········································243

12.3.1 同样要分析出错第一现场 ···········243

12.3.2 处理常见检查性异常——必须 ························243

12.4 高手掌握异常处理机制 ······················243

12.4.1 传统机制 ·······································244

12.4.2 高手为何要知道异常是怎样在程序中传播的 ·················246

12.4.3 怎样获取更多异常信息 ···············247

12.4.4 用实例解释最直观易懂 ···············248

12.5 高手应用throw直接抛出异常 ··········250

12.5.1 JVM怎样自动抛出异常 ··············251

12.5.2 你也可以直接抛出异常 ···············251

12.5.3 你还可以重抛异常 ·······················252

12.6 嵌套异常处理 ······································253

12.6.1 什么是异常机制嵌套方式 ···········253

12.6.2 嵌套异常是怎样传播的 ···············254

12.6.3 为什么讨论嵌套异常重抛 ···········255

12.7 高手自己定义异常类 ··························256

12.7.1 编写自定义异常类原来如此简单 ··························256

12.7.2 高手掌握的自定义异常处理技巧 ···························257

12.7.3 用实例解释最直接易懂 ···············258

12.8 异常链是什么 ······································259

12.8.1 异常处理信息不见了——什么情况 ························259

12.8.2 应用异常链保证不会丢失处理信息 ·······················259

12.9 断言——高手可以断言可能发生的错误——assert ···················261

12.9.1 如何编写断言 ·······························261

12.9.2 开启和关闭断言 ···························262

实战项目:利用异常处理机制开发你的数据验证类 ··················263

巩固提高练习和实战项目大练兵 ·················265

第13章 高手掌握更多OOP技术 ·········266

13.1 创建自己的API包 ·····························266

13.1.1 包有哪些命名规范 ·······················267

13.1.2 创建包文件 ···································267

13.1.3 引入包文件 ···································268

13.2 用Eclipse的包管理项目中的文件 ······269

13.3 在Eclipse中创建文件库 ····················270

13.3.1 什么是JAR文件 ··························270

13.3.2 创建文件库 ···································270

13.4 揭秘访问权 ··········································271

13.5 类的更多应用——你知多少 ··············273

13.5.1 类之间的关系——父子、部下还是亲戚 ·····················273

13.5.2 什么是文件类 ·······························274

13.5.3 内部类怎样用 ·······························274

13.5.4 为什么用静态内部类 ···················276

13.5.5 本地类是什么 ·······························278

13.5.6 没有名字的类——匿名类 ···········279

13.5.7 这么多类——高手攻略 ···············279

13.6 枚举类是什么 ······································280

13.6.1 怎样定义和使用枚举 ···················280

13.6.2 静态引入——编写枚举类更方便 ························282

13.6.3 高手必须知道的枚举 ···················283

13.6.4 一个实例教会你应用枚举 ···········285

13.7 高手须知可变参数 ······························286

13.7.1 可变参数是重载的极致应用 ·······286

13.7.2 揭秘可变参数——它怎样工作 ···287

13.7.3 可变参数方法可以重载 ···············288

13.8 什么是javadoc和怎样用它 ···············288

实战项目:创建可被任何程序调用的文件库(JDK9和以后版本) ·················290

巩固提高练习和实战项目大练兵 ·················292

第14章 高手须知集合类 ····················293

14.1 用集合类做些什么 ······························293

14.1.1 集合类与数组的比较 ···················294

14.1.2 集合类都有哪些 ···························294

14.1.3 什么是Java的泛类型 ··················296

14.1.4 高手怎样应用泛类型 ···················301

14.1.5 值得注意的类型安全问题 ···········303

14.2 揭秘集合类 ··········································304

14.2.1 可改变大小的数组 ·······················304

14.2.2 链接表 ···········································306

14.2.3 哈希集合 ·······································307

14.2.4 元素迭代器 ···································308

14.2.5 用实例教会你集合类应用 ···········309

14.3 Map的集合类 ·····································311

14.3.1 怎样使用HashMap ·······················311

14.3.2 怎样使用TreeMap ························312

14.3.3 怎样对自定义类型TreeMap排序 ·····················314

14.4 集合类和数据结构 ······························315

14.4.1 堆栈 ···············································315

14.4.2 队列 ···············································315

14.4.3 细说集合中的排序 ·······················316

14.4.4 搜索——我要找到你 ···················318

14.4.5 洗牌——想玩斗地主 ···················319

14.4.6 集合类应用总结 ···························320

14.4.7 高手理解集合类的同步与不同步 ······················321

实战项目:利用HashMap开发产品管理应用 ························321

巩固提高练习和实战项目大练兵 ·················323

第15章 多线程 ································325

15.1 Java的本质是多线程 ··························325

15.1.1 揭秘多线程怎样工作 ···················325

15.1.2 多任务和多处理是一回事吗 ·······326

15.1.3 多线程应用范围太广泛了 ···········326

15.1.4 一张图搞懂线程的5种状态 ·······327

15.1.5 你的第一个多线程程序 ···············327

15.2 如何创建多线程 ··································329

15.2.1 可以继承Thread创建线程 ··········329

15.2.2 可以完善Runnable接口来创建线程 ·························330

15.2.3 多线程典型案例:生产-消费线程初探·······················331

15.3 多线程控制 ··········································333

15.3.1 设置优先级——setPriority方法 ·························333

15.3.2 给其他线程让步——yield方法 ···············································334

15.3.3 让我的线程休息——sleep方法 ···············································334

15.3.4 让我的线程加入执行——join方法 ·········································336

15.3.5 打断我的线程运行——interrupt方法 ···································336

15.3.6 应用实例——线程和数组哪个运行的快 ······························337

15.4 高手必知多线程协调 ··························339

15.4.1 什么是多线程协调 ·······················339

15.4.2 高手怎样实现多线程协调 ···········340

15.4.3 什么是易变数据——volatile ·······340

15.4.4 你的多线程协调吗——synchronized ··································340

15.4.5 要协调必须等待——wait方法 ·······342

15.4.6 你的线程协调得到通知了吗——notify或notifyAll ·························343

15.5 高手须知更多多线程 ··························344

15.5.1 一张图看懂监视器和线程锁定 ·······344

15.5.2 更多多线程实战术语和编程技巧 ····························345

15.5.3 并行类包——java.util. concurrent ······················346

实战项目:利用多线程和并行处理开发生产-消费应用 ···············349

巩固提高练习和实战项目大练兵 ·················352

第四部分 GUI和多媒体编程

第16章 GUI——使你的窗口出彩 ········356

16.1 从一个典型例子看懂GUI组件 ·········356

16.1.1 Swing包中的组件从哪里来 ········357

16.1.2 一张图看懂组件的继承关系 ·······357

16.1.3 组件操作功能从Component继承而来 ····················358

16.2 创建框架就是实例窗口 ······················358

16.2.1 怎样显示创建的窗口 ···················358

16.2.2 怎样关闭显示的窗口 ···················359

16.2.3 窗口位置和大小控制 ···················360

16.2.4 在屏幕中央显示窗口实例 ···········361

16.3 用控制面板管理组件——JPanel ·······362

16.3.1 一个例子搞懂控制面板怎样管理组件 ························362

16.3.2 手把手教会你组件编程步骤 ·······362

16.3.3 揭秘控制面板结构内幕 ···············363

16.4 怎样创建按钮——JButton ·················364

16.4.1 创建按钮举例 ·······························364

16.4.2 把组件显示到默认位置——FlowLayout ····································366

16.4.3 按下按钮要做什么——按钮事件处理 ······································367

16.5 标签和文本字段是闺蜜 ······················368

16.5.1 怎样编写标签——JLabel·············368

16.5.2 怎样编写文本字段—— JTextField ······································369

16.5.3 怎样处理文本字段事件 ···············370

16.5.4 我想让用户输入密码——JPasswordField ··························372

16.5.5 应用实例——学会这些组件编程 ·········································372

16.6 文本窗口的创建和应用——JTextArea ····································374

16.6.1 文本窗口的创建和方法调用 ·······374

16.6.2 在文本窗口中设置滚动面板——JScrollPane ····················375

16.6.3 应用编程实例 ·······························375

16.7 选项框——JCheckBox ·······················376

16.7.1 选项框事件处理 ···························377

16.7.2 应用编程实例 ·······························378

16.8 单选按钮——JRadioButton ················380

16.8.1 单选按钮事件处理 ·······················381

16.8.2 应用编程实例 ·······························381

巩固提高练习和实战项目大练兵 ·················384

第17章 GUI组件布局——安排组件位置和显示风格 ··················385

17.1 Java的6种布局管理类 ······················385

17.2 系统预设的流程布局——FlowLayout ·········································386

17.2.1 3种显示位置 ································386

17.2.2 编程实例 ·······································386

17.3 围界布局管理类——BorderLayout ·······387

17.3.1 5种布局区域 ································388

17.3.2 高手常用布局嵌套 ·······················389

17.3.3 如何动态显示按钮的位置 ···········389

17.4 给组件加上5种不同风格的边框 ······390

17.4.1 边框BorderFactory设计编程步骤 ···············································391

17.4.2 编程实例 ·······································392

17.5 标记板——JTabbedPane ·····················393

17.5.1 如何应用标记板 ···························393

17.5.2 编程实例 ·······································394

17.6 箱式布局BoxLayout和网格布局GridLayout ·································396

17.6.1 如何应用箱式布局管理 ···············396

17.6.2 如何应用网格布局管理 ···············397

17.6.3 嵌套使用才更灵活 ·······················398

实战项目:计算器模拟应用开发(2) ·········399

17.7 高手要掌握的最强布局管理GridBagLayout ·····································400

17.7.1 必须使用设计图——方法和步骤 ···············································401

17.7.2 编程实例 ·······································402

17.8 用户接口管理——UIManager可以做啥 ·························404

17.8.1 常用用户接口管理UIManager ····································405

17.8.2 编程实例 ·······································405

实战项目:开发西方快餐销售调查应用(1) ·························406

巩固提高练习和实战项目大练兵 ·················407

第18章 更多组件和事件处理 ··············409

18.1 下拉列表——JComboBox ··················409

18.1.1 编程实例 ·······································410

18.1.2 事件处理 ·······································411

18.1.3 ItemListener事件处理接口 ··········411

18.1.4 我怎么用它——编程实例 ···········413

18.2 列表——JList ······································416

18.2.1 编程实例 ·······································417

18.2.2 ListSelectionListener事件处理接口 ································418

18.2.3 列表的更多编程技巧 ···················419

实战项目:利用列表开发名词学习记忆应用 ···································421

18.3 菜单——JMenu ···································422

18.3.1 菜单编写步骤 ·······························422

18.3.2 编程举例 ·······································423

18.3.3 如何加入子菜单 ···························423

18.3.4 菜单的事件处理 ···························424

18.3.5 设置键盘助记——高手才会这样做 ······················424

18.3.6 高手设置快捷键 ···························425

18.3.7 MenuListener处理菜单事件接口 ································426

实战项目:开发西方快餐销售调查应用(2) ······················428

18.4 高手须知弹出式菜单 ··························431

18.4.1 一步步教会你编写步骤 ···············431

18.4.2 编程实例 ·······································431

18.4.3 PopupMenuListener事件处理接口 ··························433

18.4.4 鼠标右键激活弹出式菜单 ···········433

实战项目:开发西方快餐销售调查应用(3) ··························434

18.5 高手应掌握更多GUI组件 ·················435

18.5.1 如何应用滑块——JSlider ············436

18.5.2 如何应用进度条——JProgressBar ··································438

18.5.3 如何应用文件选择器——JFileChooser ··································439

18.5.4 如何应用颜色选择器——JColorChooser ·······························441

18.5.5 如何应用制表——JTable ·············442

18.5.6 如何应用树——JTree ··················443

18.5.7 如何应用桌面板——JDesktopPane·································446

巩固提高练习和实战项目大练兵 ·················447

第19章 揭秘事件处理那些事儿 ···········449

19.1 高手须知事件处理内幕 ······················449

19.1.1 事件处理是怎样工作的 ···············449

19.1.2 常用事件处理接口 ·······················451

19.1.3 为何要用适配器 ···························452

19.1.4 适配器应用实例 ···························453

19.2 高手必知鼠标事件处理 ······················454

19.2.1 都有哪些鼠标事件 ·······················454

19.2.2 鼠标事件处理接口和适配器 ·······454

19.2.3 鼠标事件处理演示程序 ···············454

19.3 高手须知键盘事件处理 ······················455

19.3.1 键盘事件处理接口和适配器 ·······456

19.3.2 键盘事件处理常用方法 ···············456

19.4 高手掌握的GUI组件编程技巧 ·········457

19.4.1 组件编程的6种方式 ···················457

19.4.2 事件处理的6种方式 ···················461

实战项目:计算器模拟应用开发(3) ·········463

巩固提高练习和实战项目大练兵 ·················465

第20章 多媒体编程——高手须知的那些事儿 ·············467

20.1 字体编程 ··············································467

20.1.1 字体编程常用术语 ·······················467

20.1.2 字体编程常用方法和举例 ···········468

20.1.3 应用实例学会字体编程 ···············469

20.2 颜色编程 ··············································470

20.2.1 颜色编程常用术语 ·······················471

20.2.2 颜色编程常用方法和举例 ···········471

20.2.3 应用实例学会颜色编程 ···············472

20.3 JavaFX图形编程 ·································473

20.3.1 JavaFX编程步骤 ··························473

20.3.2 图形编程常用方法 ·······················474

20.3.3 图形编程步骤 ·······························474

20.3.4 应用实例学会图形编程 ···············475

20.4 JavaFX图像编程 ·································476

20.4.1 Java支持的4种图像格式 ···········476

20.4.2 图像编程常用方法 ·······················476

20.4.3 图像编程步骤 ·······························477

20.4.4 应用实例学会图像编程 ···············477

20.5 JavaFX音频编程 ·································478

20.5.1 Java支持的3种音频格式 ···········478

20.5.2 音频编程常用方法 ·······················478

20.5.3 音频编程步骤 ·······························479

20.5.4 播放音乐编程实例 ·······················479

实战项目:利用多媒体开发英文字母学习游戏应用 ·················480

巩固提高练习和实战项目大练兵 ·················483

第五部分 高手进阶——数据流处理和编程

第21章 文件I/O ······························486

21.1 数据流和文件 ······································486

21.1.1 文件I/O基本知识须知 ················487

21.1.2 揭秘文件路径 ·······························487

21.1.3 用实例看懂绝对路径和规范路径 ···················488

21.1.4 高手理解URI、URL和URN ······488

21.1.5 文件类常用方法 ···························488

21.1.6 文件I/O中为什么要缓冲 ············492

21.1.7 文件I/O必须处理异常 ················492

21.2 文本文件I/O ·······································492

21.2.1 文本文件输出 ·······························493

21.2.2 缓冲和无缓冲的文本输出 ···········493

21.2.3 文本文件输入 ·······························495

21.2.4 文本文件输入实例 ·······················496

实战项目:开发产品销售文本文件管理应用 ··················498

21.3 二进制文件I/O ···································502

21.3.1 二进制文件的输出 ·······················502

21.3.2 二进制文件输出举例 ···················503

21.3.3 二进制文件的输入 ·······················504

21.3.4 二进制文件输入实例 ···················505

实战项目:开发产品销售二进制文件管理应用 ··············507

21.4 高手须知对象序列化I/O ···················510

21.4.1 你的对象序列化了吗 ···················510

21.4.2 手把手教会你对象序列化 ···········511

21.4.3 对象序列化常用类和方法 ···········511

21.4.4 对象序列化编程步骤 ···················511

实战项目:利用对象序列化开发产品销售文件管理应用 ···················512

21.5 随机文件I/O ·······································517

21.5.1 随机文件I/O常用方法和访问模式 ····················517

21.5.2 文件记录和位置计算 ···················518

21.5.3 用实例学会随机文件I/O ·············518

21.6 高手须知更多文件I/O编程技术 ······520

21.6.1 细谈JFileChooser ·························520

21.6.2 Java支持的压缩文件I/O ·············521

21.6.3 一步步教会你压缩文件I/O ·········521

21.6.4 用Scanner读入文件 ····················527

实战项目:开发产品销售随机文件管理应用 ············528

巩固提高练习和实战项目大练兵 ·················534

第22章 数据库编程 ··························536

22.1 揭秘JDBC ···········································536

22.2 数据库基本知识 ··································537

22.3 数据库语言——SQL ··························538

22.3.1 SQL的6种基本指令 ···················538

22.3.2 SQL的基本数据类型 ···················538

22.3.3 创建指令——CREATE ················539

22.3.4 选择指令——SELECT ·················539

22.3.5 更新指令——UPDATE ················540

22.3.6 插入指令——INSERT ·················540

22.3.7 删除记录指令——DELETE ········540

22.3.8 删除数据表指令——DROP ·········541

22.4 数据库和JDBC驱动软件的安装及测试 ·············541

22.4.1 下载数据库软件 ···························541

22.4.2 数据库安装 ···································541

22.4.3 数据库运行测试 ···························542

22.4.4 下载JDBC驱动软件 ···················543

22.4.5 一步步教会你在Eclipse中连接数据库 ··········544

22.4.6 一个实例搞懂JDBC是否连接成功 ············545

22.4.7 编写第一个数据库程序 ···············545

22.5 Java程序和数据库对话 ······················547

22.5.1 连接数据库——高手都会这样做 ················547

22.5.2 向数据库发送SQL指令 ··············548

22.5.3 接收从数据库传回的记录 ···········549

22.5.4 提取和更新传回的记录 ···············550

22.5.5 预备指令是怎么回事 ···················551

实战项目:利用数据库和GUI开发产品销售管理应用(1) ··············553

22.6 高手了解更多JDBC编程 ··················558

22.6.1 细谈元数据是啥和怎样用 ···········558

22.6.2 什么是事务处理和怎样实现 ·······559

22.6.3 三个步骤两个实例搞懂事务处理编程 ·····················559

实战项目:利用数据库和GUI开发产品销售管理应用(2) ················560

巩固提高练习和实战项目大练兵 ·················564

第23章 网络编程 ·····························565

23.1 为什么高手必知网络编程 ··················565

23.1.1 必须遵循通信协议 ·······················565

23.1.2 URL和IP地址是一回事吗 ·········566

23.1.3 URL和URI ··································566

23.1.4 端口和通信号 ·······························567

23.1.5 一张表看懂端口分配 ···················567

23.1.6 揭秘HTTP ····································568

23.1.7 URL和URLConnection编程实例 ························569

23.2 一步步教会你网络编程 ······················570

23.2.1 细谈Socket ···································570

23.2.2 Stream Sockets和Datagram Sockets ·····················571

23.2.3 用户-服务器编程步骤 ················571

23.2.4 一个代码实例教会你用户-服务器编程 ·························571

23.2.5 单用户-服务器程序测试运行步骤 ··························574

23.2.6 手把手教你DatagramSocket用户-服务器编程 ············574

23.3 炼成网络编程高手从这里起步 ··········578

23.3.1 手把手教你Socket多用户-服务器编程 ·············578

23.3.2 多用户-服务器程序测试运行步骤 ·······················580

23.3.3 手把手教你Datagram多用户-服务器编程 ·························581

23.3.4 多用户-服务器数据库编程 ········583

实战项目:开发多用户-服务器产品销售数据库管理应用 ··············584

23.4 高手必会的高级网络编程 ··················590

23.4.1 面向连接传输与面向传输连接 ···························590

23.4.2 怎样设置Socket超时控制 ··········591

23.4.3 揭秘Socket中断技术 ··················592

23.4.4 揭秘Socket半关闭技术 ··············593

23.4.5 揭秘java.nio ·································593

23.4.6 数据流和数据块——网络编程用哪个 ····················594

23.4.7 数据块编程需要通道技术——Channel ··························594

23.4.8 一步步教会你通道技术网络编程 ························594

23.4.9 应用缓冲的通道编程技术 ···········595

23.4.10 数据块中字符集的定义、编码和译码 ····················596

23.4.11 应用选择器Selector实现多用户-服务器编程 ··················597

23.4.12 一步步教会你选择器多用户-服务器编程 ··················597

23.4.13 通道和选择器编程实例 ·············598

实战项目:开发多用户-服务器聊天室应用 ························602

巩固提高练习和实战项目大练兵 ·················606

作者简介

编辑推荐

资深软件工程师20多年教学与开发经验结晶,通过500多个简单易懂、可运行的完整实例,帮助读者理解Java编程的逻辑、概念及实操

作者寄语

高永强,博士,现任美国加利福尼亚州奥龙尼学院计算机系终身教授,并受聘为国内外多所大学的客座教授。从事国内外计算机教学以及软件开发和咨询20多年,专长于计算机语言、计算机管理信息系统,以及计算机应用和培训。出版著作《微型计算机应用用户指南》《全C编程》和《Java编程艺术》。

卢晨,苏州大学计算机科学与技术学院研究生毕业,苏州工业园区服务外包职业学院副教授。拥有十余年一线软件开发教学经验,教授Java程序设计、Android开发等课程,主持和参与多个移动应用系统、网站系统开发项目,主编和参编《Java实践教程》《Android高级应用开发案例教程》等。

电子资料

www.luweidong.cn

下一个