图书目录

第 1 章 Java 入门

1.1 Java 的平台无关性 . . . . . . . . 1

1.1.1 平台与机器指令 . . . . . . . . 1

1.1.2 C/C++程序依赖平台 . . . . . . . … 2

1.1.3 虚拟机与平台 . . . . . . . . … 2

1.2 Java 之父——James Gosling . . . . . . … 3

1.3 Java 的地位 . . . . . . . . . 3

1.3.1 网络地位 . . . . . . . . . 3

1.3.2 语言地位 . . . . . . . . . 3

1.3.3 需求地位 . . . . . . . . . 4

1.4 安装 JDK . . . . . . . . . … 4

1.4.1 平台简介 . . . . . . . . . 4

1.4.2 安装 Java SE 平台 . . . . . . . … … 4

1.4.3 系统环境的设置 . . . . . . . . 6

1.5 Java 程序的开发步骤 . . . . . . . … … 7

1.6 一个简单的 Java 应用程序 . . . . . . . 8

1.6.1 编写源文件 . . . . . . . . … … 8

1.6.2 编译 . . . . . . . . . … … 9

1.6.3 运行 . . . . . . . . . … … 11

1.7 上机实践 . . . . . . . . . . 11

1.7.1 输出两行文字 . . . . . . . . … 11

1.7.2 使用-encoding 参数 . . . . . . . … 13

1.8 课外读物 . . . . . . . . . . 13

习题 1 . . . . . . . . . . . 14第 Ⅳ

2 章 Java 应用程序的基本结构

2.1 问题的提出 . . . . . . . . . 15

2.2 简单的 Circle 类 . . . . . . . . … 16

2.3 使用 Circle 类创建对象 . . . . . . . … 16

2.3.1 用类声明对象 . . . . . . . . … 17

2.3.2 为对象分配变量 . . . . . . . . 17

2.3.3 使用对象 . . . . . . . . . 18

2.4 在应用程序中使用对象 . . . . . . . … 18

2.5 Java 应用程序的基本结构 . . . . . . … … 19

2.6 在一个源文件中编写多个类 . . . . . . … … 21

2.7 编程风格 . . . . . . . . . … 22

2.7.1 Allmans 风格 . . . . . . . . … 22

2.7.2 Kernighan 风格 . . . . . . . . 22

2.7.3 注释 . . . . . . . . . … … 23

2.8 上机实践 . . . . . . . . . . 23

2.8.1 联合编译 . . . . . . . . . 23

2.8.2 编译多个类 . . . . . . . . … … 25

2.9 课外读物 . . . . . . . . . . 26

习题 2 . . . . . . . . . . . 26

第 3 章 标识符与简单数据类型

3.1 标识符与关键字 . . . . . . . . … 27

3.1.1 标识符 . . . . . . . . . … 27

3.1.2 关键字 . . . . . . . . . … 27

3.2 简单数据类型 . . . . . . . . … … 28

3.2.1 逻辑类型 . . . . . . . . . 28

3.2.2 整数类型 . . . . . . . . . 28

3.2.3 字符类型 . . . . . . . . . 29

3.2.4 浮点类型 . . . . . . . . . 30

3.3 简单数据类型的级别与类型转换运算 . . . . . … 31

3.4 从命令行窗口输入输出数据 . . . . . . … … 32

3.4.1 输入基本型数据 . . . . . . . . 32

3.4.2 输出基本型数据 . . . . . . . . 33

3.5 上机实践 . . . . . . . . . . 34

3.5.1 输出希腊字母 . . . . . . . . … 34

3.5.2 产品的总价 . . . . . . . . … … 35

3.6 课外读物 . . . . . . . . . . 36

习题 3 . . . . . . . . . . . 37Ⅴ

第 4 章 运算符、 表达式与语句

4.1 运算符与表达式 . . . . . . . . … 38

4.1.1 算术运算符与算术表达式 . . . . . . … … 38

4.1.2 自增、 自减运算符 . . . . . . . … … 38

4.1.3 算术混合运算的精度 . . . . . . . … 38

4.1.4 关系运算符与关系表达式 . . . . . . … … 39

4.1.5 逻辑运算符与逻辑表达式 . . . . . . … … 39

4.1.6 赋值运算符与赋值表达式 . . . . . . … … 40

4.1.7 位运算符 . . . . . . . . . 40

4.1.8 instanceof 运算符 . . . . . . . … … 41

4.1.9 运算符综述 . . . . . . . . … … 41

4.2 语句概述 . . . . . . . . . … 41

4.3 条件分支语句 . . . . . . . . … … 42

4.3.1 if 语句 . . . . . . . . . … 42

4.3.2 if… else 语句 . . . . . . . . … 42

4.3.3 if… else if… else 语句 . . . . . . . 43

4.4 开关语句 . . . . . . . . . … 45

4.5 循环语句 . . . . . . . . . … 47

4.5.1 for 循环语句 . . . . . . . . … 47

4.5.2 while 循环语句 . . . . . . . . 48

4.5.3 do… while 循环语句 . . . . . . . … 48

4.6 break 和 continue 语句 . . . . . . . 49

4.7 数组 . . . . . . . . . . 50

4.7.1 声明数组 . . . . . . . . . 50

4.7.2 为数组分配元素 . . . . . . . . 51

4.7.3 数组元素的使用 . . . . . . . . 52

4.7.4 length 的使用 . . . . . . . . 52

4.7.5 数组的初始化 . . . . . . . . … 52

4.7.6 数组的引用 . . . . . . . . … … 52

4.7.7 遍历数组 . . . . . . . . . 54

4.8 上机实践 . . . . . . . . . . 55

4.8.1 猜数游戏 . . . . . . . . . 55

4.8.2 遍历与复制数组 . . . . . . . . 56

4.9 课外读物 . . . . . . . . . . 58

习题 4 . . . . . . . . . . . 58

第 5 章 类与对象

5.1 面向对象的特性 . . . . . . . . … 60

5.2 类 . . . . . . . . . . … 61Ⅵ

5.2.1 类声明 . . . . . . . . . … 61

5.2.2 类体 . . . . . . . . . … … 62

5.2.3 成员变量 . . . . . . . . . 62

5.2.4 方法 . . . . . . . . . … … 63

5.2.5 需要注意的问题 . . . . . . . . 65

5.2.6 类的 UML 图 . . . . . . . . … 65

5.3 构造方法与对象的创建 . . . . . . . … 66

5.3.1 构造方法 . . . . . . . . . 66

5.3.2 创建对象 . . . . . . . . . 67

5.3.3 使用对象 . . . . . . . . . 69

5.3.4 对象的引用和实体 . . . . . . . … … 70

5.4 参数传值 . . . . . . . . . … 71

5.4.1 传值机制 . . . . . . . . . 71

5.4.2 基本数据类型参数的传值 . . . . . . … … 72

5.4.3 引用类型参数的传值 . . . . . . . … 72

5.5 对象的组合 . . . . . . . . . 75

5.5.1 由矩形和圆组合而成的图形 . . . . . . … 75

5.5.2 关联关系和依赖关系的 UML 图 . . . . . … … 78

5.6 实例成员与类成员 . . . . . . . . 79

5.6.1 实例变量和类变量的声明 . . . . . . … … 79

5.6.2 实例变量和类变量的区别 . . . . . . … … 79

5.6.3 实例方法和类方法的定义 . . . . . . … … 81

5.6.4 实例方法和类方法的区别 . . . . . . … … 81

5.7 方法重载与多态 . . . . . . . . … 82

5.8 this 关键字 . . . . . . . . . 83

5.8.1 在构造方法中使用 this . . . . . . . 84

5.8.2 在实例方法中使用 this . . . . . . . 84

5.9 包 . . . . . . . . . . … 86

5.9.1 包语句 . . . . . . . . . … 86

5.9.2 有包名的类的存储目录 . . . . . . . 86

5.9.3 运行有包名的主类 . . . . . . . … … 87

5.10 import 语句 . . . . . . . . … … 88

5.10.1 引入类库中的类 . . . . . . . … … 88

5.10.2 引入自定义包中的类 . . . . . . . 89

5.11 访问权限 . . . . . . . . . 91

5.11.1 何谓访问权限 . . . . . . . . 91

5.11.2 私有变量和私有方法 . . . . . . . 91

5.11.3 共有变量和共有方法 . . . . . . . 92

5.11.4 友好变量和友好方法 . . . . . . . 93

5.11.5 受保护的成员变量和方法 . . . . . . … 93

5.11.6 public 类与友好类. . . . . . . … 94

5.12 基本类型的类包装 . . . . . . . . … 94Ⅶ

5.12.1 Double 类和 Float 类 . . . . . . … … 95

5.12.2 Byte 类、 Short 类、 Integer 类、 Long 类 . . . . 95

5.12.3 Character 类 . . . . . . . . 95

5.13 可变参数 . . . . . . . . . 95

5.14 var 局部变量 . . . . . . . . … 97

5.15 上机实践 . . . . . . . . . … … 98

5.15.1 机动车 . . . . . . . . . 98

5.15.2 电视机 . . . . . . . . . 99

5.15.3 森林 . . . . . . . . . 101

5.16 课外读物 . . . . . . . . . … … 103

习题 5 . . . . . . . . . . … … 103

第 6 章 子类与继承

6.1 子类与父类 . . . . . . . . … … 106

6.2 子类的继承性 . . . . . . . . … 107

6.2.1 子类和父类在同一包中的继承性 . . . . . … 107

6.2.2 子类和父类不在同一包中的继承性 . . . . . 108

6.2.3 继承关系的 UML 图. . . . . . . … 108

6.3 成员变量的隐藏和方法重写 . . . . . . … 108

6.3.1 成员变量的隐藏 . . . . . . . … … 108

6.3.2 方法重写 . . . . . . . . … … 108

6.4 super 关键字 . . . . . . . . … 111

6.4.1 用 super 操作被隐藏的成员变量和方法 . . . . … 111

6.4.2 使用 super 调用父类的构造方法 . . . . . … 113

6.5 final 关键字 . . . . . . . . … … 114

6.5.1 final 类 . . . . . . . . . 114

6.5.2 final 方法 . . . . . . . . … … 114

6.5.3 常量 . . . . . . . . . … 114

6.6 对象的上转型对象 . . . . . . . … … 114

6.7 继承与多态 . . . . . . . . … … 116

6.8 abstract 类和 abstract 方法 . . . . . . … 117

6.9 面向抽象编程 . . . . . . . . … 118

6.10 开-闭原则 . . . . . . . . … … 121

6.11 上机实践 . . . . . . . . . … … 122

6.11.1 面积之和 . . . . . . . . … 122

6.11.2 薪水总和 . . . . . . . . … 124

6.12 课外读物 . . . . . . . . . … … 126

习题 6 . . . . . . . . . . … … 126第 Ⅷ

7 章 接口与实现

7.1 接口 . . . . . . . . . … … 128

7.2 实现接口 . . . . . . . . . 129

7.3 理解接口 . . . . . . . . . 131

7.4 接口的 UML 图 . . . . . . . . … 132

7.5 接口回调 . . . . . . . . . 132

7.6 接口与多态 . . . . . . . . … … 134

7.7 接口变量作参数 . . . . . . . . 135

7.8 abstract 类与接口的比较 . . . . . . … … 136

7.9 面向接口编程 . . . . . . . . … 136

7.10 函数接口与 Lambda 表达式 . . . . . . 139

7.11 上机实践 . . . . . . . . . … … 141

7.11.1 评价成绩 . . . . . . . . … 141

7.11.2 小狗的状态 . . . . . . . . 142

7.12 课外读物 . . . . . . . . . … … 144

习题 7 . . . . . . . . . . … … 144

第 8 章 内部类与异常类

8.1 内部类 . . . . . . . . . … 146

8.2 匿名类 . . . . . . . . . … 147

8.2.1 和子类有关的匿名类 . . . . . . . 147

8.2.2 和接口有关的匿名类 . . . . . . . 149

8.3 异常类 . . . . . . . . . … 150

8.3.1 try… catch 语句 . . . . . . . … … 150

8.3.2 自定义异常类 . . . . . . . . 151

8.3.3 finally 子语句 . . . . . . . . 153

8.4 断言 . . . . . . . . . … … 154

8.5 上机实践 . . . . . . . . . … … 155

8.5.1 内部购物券 . . . . . . . . … 155

8.5.2 检查危险品 . . . . . . . . … 157

8.6 课外读物 . . . . . . . . . … … 159

习题 8 . . . . . . . . . . … … 159

第 9 章 常用实用类

9.1 String 类 . . . . . . . . . … … 160

9.1.1 构造字符串对象 . . . . . . . 160

9.1.2 String 类的常用方法 . . . . . . … 161

9.1.3 字符串与基本数据的相互转换 . . . . . 164Ⅸ

9.1.4 对象的字符串表示 . . . . . . … … 166

9.1.5 字符串与字符数组、 字节数组 . . . . . 166

9.1.6 正则表达式及字符串的替换与分解 . . . . … 169

9.2 StringBuffer 类 . . . . . . . . 172

9.2.1 StringBuffer 对象的创建 . . . . . . … 172

9.2.2 StringBuffer 类的常用方法 . . . . . . 173

9.3 StringTokenizer 类 . . . . . . . … … 175

9.4 Date 类 . . . . . . . . . … 176

9.4.1 构造 Date 对象 . . . . . . . … … 176

9.4.2 日期格式化 . . . . . . . . … 176

9.5 Calendar 类 . . . . . . . . … … 178

9.6 Math 类和 BigInteger 类 . . . . . . … … 181

9.6.1 Math 类 . . . . . . . . … … 181

9.6.2 BigInteger 类 . . . . . . . . 181

9.7 DecimalFormat 类 . . . . . . . … … 182

9.7.1 格式化数字 . . . . . . . . … 182

9.7.2 将格式化字符串转换为数字 . . . . . . 184

9.8 Pattern 类和 Match 类 . . . . . . . 185

9.8.1 模式对象 . . . . . . . . … … 185

9.8.2 匹配对象 . . . . . . . . … … 185

9.9 Scanner 类 . . . . . . . . … … 187

9.10 Record 类 . . . . . . . . . … 188

9.11 UUID 类 . . . . . . . . . … … 190

9.12 上机实践 . . . . . . . . . … … 191

9.12.1 购物小票 . . . . . . . . … 191

9.12.2 替换错别字 . . . . . . . . 192

9.13 课外读物 . . . . . . . . . … … 193

习题 9 . . . . . . . . . . … … 194

第10 章 输入输出流

10.1 File 类 . . . . . . . . . … … 196

10.1.1 文件的属性 . . . . . . . … 197

10.1.2 目录 . . . . . . . . … 197

10.1.3 文件的创建与删除 . . . . . . … 199

10.1.4 运行可执行文件 . . . . . . … … 199

10.2 字节流与字符流 . . . . . . . … … 199

10.2.1 InputStream 类与 OutputStream 类 . . . . … 200

10.2.2 Reader 类与 Writer 类 . . . . . . … 200

10.2.3 关闭流. . . . . . . . … … 201

10.3 文件字节流 . . . . . . . . . 201

10.3.1 文件字节输入流 . . . . . . … … 201Ⅹ

10.3.2 文件字节输出流 . . . . . . … … 202

10.4 文件字符流 . . . . . . . . … 203

10.5 缓冲流 . . . . . . . . . 204

10.6 随机流 . . . . . . . . . 206

10.7 数组流 . . . . . . . . . 208

10.8 数据流 . . . . . . . . . 210

10.9 对象流 . . . . . . . . . 213

10.10 序列化与对象克隆 . . . . . . . … 215

10.11 文件锁 . . . . . . . . . 216

10.12 使用 Scanner 解析文件 . . . . . . … 217

10.13 上机实践 . . . . . . . . . … 219

10.13.1 分析成绩单 . . . . . . . … 219

10.13.2 统计英文单词 . . . . . . . 221

10.14 课外读物 . . . . . . . . . … 223

习题 10 . . . . . . . . . . … 223

第 11 章 组件与事件处理

11.1 Java Swing 概述 . . . . . . . … … 225

11.2 窗口 . . . . . . . . . . 226

11.2.1 JFrame 常用方法 . . . . . . … 226

11.2.2 菜单条、 菜单、 菜单项 . . . . . … … 227

11.3 常用组件与布局 . . . . . . . . … 229

11.3.1 常用组件 . . . . . . . … … 229

11.3.2 常用容器 . . . . . . . … … 231

11.3.3 常用布局 . . . . . . . … … 232

11.3.4 选项卡窗格 . . . . . . . … 234

11.4 处理事件 . . . . . . . . . … 236

11.4.1 事件处理模式 . . . . . . . 237

11.4.2 ActionEvent 事件 . . . . . . … 237

11.4.3 ItemEvent 事件 . . . . . . … … 241

11.4.4 DocumentEvent 事件 . . . . . … … 243

11.4.5 MouseEvent 事件 . . . . . . … 245

11.4.6 焦点事件 . . . . . . . … … 249

11.4.7 键盘事件 . . . . . . . … … 249

11.4.8 匿名类实例或窗口作为监视器 . . . . … … 252

11.4.9 事件总结 . . . . . . . … … 254

11.5 使用 MVC 结构 . . . . . . . … … 254

11.6 对话框 . . . . . . . . . … … 257

11.6.1 消息对话框 . . . . . . . … 257Ⅺ

11.6.2 输入对话框 . . . . . . . … 259

11.6.3 确认对话框 . . . . . . . … 260

11.6.4 颜色对话框 . . . . . . . … 262

11.6.5 文件对话框 . . . . . . . … 263

11.6.6 自定义对话框 . . . . . . . 265

11.7 发布 GUI 程序 . . . . . . . . 267

11.8 上机实践 . . . . . . . . . … 267

11.8.1 算术测试. . . . . . . . … 267

11.8.2 计算器. . . . . . . . … … 271

11.9 课外读物 . . . . . . . . . … 274

习题 11 . . . . . . . . . . … 274

第 12 章 Java 多线程机制

12.1 进程与线程 . . . . . . . . … 275

12.1.1 操作系统与进程. . . . . . . … 275

12.1.2 进程与线程. . . . . . . . 275

12.2 Java 中的线程 . . . . . . . . 276

12.2.1 Java 的多线程机制 . . . . . . … … 276

12.2.2 线程的状态与生命周期. . . . . . … 277

12.2.3 线程调度与优先级. . . . . . . 280

12.3 Thread 类与线程的创建 . . . . . . … … 280

12.3.1 使用 Thread 的子类 . . . . . . … … 280

12.3.2 使用 Thread 类 . . . . . . . … 281

12.3.3 关于 run()方法启动的次数 . . . . . … … 282

12.4 线程的常用方法 . . . . . . . … … 282

12.5 线程同步 . . . . . . . . … … 286

12.6 在同步方法中使用 wait()、 notify()和 notifyAll()方法 . . … 287

12.7 线程联合 . . . . . . . . … … 289

12.8 上机实践——打字练习 . . . . . . . … 290

12.9 课外读物 . . . . . . . . . … 292

习题 12 . . . . . . . . . . … 293

第 13 章 Java 网络编程

13.1 URL 类 . . . . . . . . . 295

13.1.1 URL 的构造方法 . . . . . . . 295

13.1.2 读取 URL 中的资源 . . . . . . … … 296

13.2 InetAddress 类 . . . . . . . … … 297

13.2.1 地址的表示. . . . . . . . 297Ⅻ

13.2.2 获取地址. . . . . . . . … 297

13.3 套接字 . . . . . . . . . … … 298

13.3.1 套接字概述 . . . . . . . … 298

13.3.2 客户端套接字. . . . . . . … … 298

13.3.3 ServerSocket 对象与服务器端套接字 . . . . 299

13.3.4 使用多线程技术 . . . . . . … … 301

13.4 UDP 数据报 . . . . . . . . … 305

13.4.1 发送数据包. . . . . . . . 305

13.4.2 接收数据包. . . . . . . . 306

13.5 广播数据报 . . . . . . . . … 309

13.6 上机实践——结算账单 . . . . . . … … 311

13.7 课外读物 . . . . . . . . . … 314

习题 13 . . . . . . . . . . … 314

第 14 章 综合实训——生命游戏

14.1 游戏规则 . . . . . . . . . … 315

14.2 实训目的 . . . . . . . . . … 315

14.3 数据模型和视图 . . . . . . . . … 316

14.4 实训代码 . . . . . . . . . … 316

14.5 实训练习 . . . . . . . . . … 325

14.6 课外读物 . . . . . . . . . … 32