第1章 Java基础 1
1.1 Java的起源 2
1.1.1 Java与C和C++的联系 3
1.2 Java对于Internet的贡献 4
1.2.1 Java applet和应用程序 4
1.2.2 安全性 4
1.2.3 可移植性 5
1.3 Java魔术:bytecode 5
1.4 Java的专门用语 6
1.5 面向对象的编程 7
1.5.1 封装 8
1.5.2 多态性 8
1.5.3 继承 9
1.6 获得JDK 10
1.7 第一个示例程序 10
1.7.1 输入程序 10
1.7.2 编译程序 11
1.7.3 逐行解释第一个示例程序 12
1.8 处理语法错误 14
1.9 第二个示例程序 15
1.10 另一种数据类型 17
项目1-1 将加仑转换为升 19
1.11 两个控制语句 20
1.11.1 if语句 20
1.11.2 for循环 22
1.12 使用代码块 24
1.13 分号和定位 25
1.14 缩排习惯 26
项目1-2 改进加仑转换为升的程序 27
1.15 Java关键字 29
1.16 Java标识符 29
1.17 Java类库 30
1.18 小测验 30
第2章 介绍数据类型和运算符 32
2.1 数据类型的重要性 33
2.2 Java的简单类型 33
2.3 整数 34
2.4 浮点类型 35
2.5 字符 36
2.6 布尔类型 38
项目2-1 闪电有多远 39
2.7 常量 40
2.7.1 十六进制和八进制常数 41
2.7.2 字符转义序列 41
2.7.3 字符串常量 42
2.8 进一步研究变量 43
2.8.1 初始化变量 43
2.8.2 动态初始化 44
2.9 变量的作用域和生存期 44
2.10 运算符 47
2.11 算术运算符 48
2.11.1 增量和减量运算 49
2.12 关系和逻辑运算符 50
2.12.1 短路逻辑运算符 52
2.13 赋值运算符 54
2.13.1 赋值的简写形式 55
2.13.2 赋值中的类型转换 55
2.14 不兼容类型的造型 57
2.15 运算符优先级 59
项目2-2 显示逻辑运算符的真值表 59
2.16 表达式 61
2.16.1 表达式中的类型转换 61
2.16.2 空格和圆括号 63
2.17 小测验 63
第3章 程序控制语句 65
3.1 从键盘输入字符 66
3.2 if语句 67
3.2.1 嵌套if语句 69
3.2.2 if-else-if阶梯 70
3.3 switch语句 72
3.3.1 嵌套switch语句 75
3.3.2 项目3-1:开始建立Java帮助系统 76
3.4 for循环 79
3.4.1 for循环的一些变化 81
3.4.2 空白部分 82
3.4.3 没有循环体的循环 83
3.4.4 在循环中声明循环控制变量 84
3.5 while循环 85
3.6 do-while循环 87
项目3-2:改进Java帮助系统 90
3.7 使用break退出循环 93
3.8 使用break作为goto的一种形式 95
3.9 使用continue语句 99
项目3-3 完成Java帮助系统 101
3.10 嵌套循环 105
3.11 小测验 107
第4章 介绍类、对象和方法 109
4.1 类基础 110
4.1.1 类的通用格式 110
4.1.2 定义类 111
4.2 对象是如何创建的 115
4.3 句柄变量和赋值 115
4.4 方法 116
4.4.1 为Vehicle类增加一个方法 117
4.4.2 从方法返回 119
4.4.3 返回值 120
4.4.4 使用自变量 122
4.4.5 为Vehicle类增加一个自变量方法 124
4.4.6 项目4-1:创建Help类 126
4.5 构造器 133
4.5.1 自变量构造器 134
4.5.2 给Vehicle类增加一个构造器 135
4.6 再次研究new运算符 137
4.7 垃圾收集和收尾 137
4.7.1 finalize()方法 138
4.7.2 项目4-2:演示收尾 139
4.8 this关键字 141
4.9 小测验 144
第5章 更多数据类型和运算符 145
5.1.1 一维数组 146
5.1.2 项目5-1:数组排序 150
5.2 多维数组 152
5.2.1 二维数组 152
5.2.2 不规则数组 153
5.2.3 三维或者更多维数的数组 155
5.2.4 初始化多维数组 155
5.3 可选择的数组声明语法 157
5.4 数组句柄赋值 157
5.5 使用length成员 159
项目5-2:一个队列类 161
5.6 String 166
5.6.1 创建String 166
5.6.2 String操作 167
5.6.3 String数组 169
5.6.4 String是不可改变的 170
5.6.5 使用命令行参数 171
5.7 位运算符 174
5.7.1 位运算符AND、OR、XOR和NOT 174
5.7.2 移位运算符 179
5.7.3 位赋值简写 181
5.7.4 项目5-3:一个ShowBits类 182
5.8 ?运算符 185
5.9 小测验 187
第6章 进一步研究方法和类 188
6.1 控制对类成员的访问 189
6.1.1 Java的访问指示符 189
6.1.2 项目6-1:改进Queue类 194
6.2 给方法传递对象 196
6.2.1 参数是如何传递的 197
6.3 返回对象 200
6.4 方法重载 202
6.5 构造器重载 208
项目6-2:重载Queue构造器 211
6.6 递归 215
6.7 理解static 217
6.7.1 static块 220
6.7.2 项目6-3:快速排序 222
6.8 介绍嵌套类和内部类 225
6.9 小测验 229
第7章 继承 231
7.1 继承的基础 232
7.1.1 成员访问和继承 235
7.2 构造器和继承 238
7.2.1 使用super调用超类构造器 240
7.3 使用super访问超类成员 246
项目7-1:扩展Vehicle类 247
7.4 创建多级类层次 250
7.5 构造器何时被调用? 254
7.6 超类句柄和子类对象 255
7.7 方法覆盖 261
7.8 覆盖方法支持多态性 264
7.8.1 为什么覆盖方法? 266
7.8.2 对TwoDShape使用方法覆盖 266
7.9 使用抽象类 271
7.10 使用final 276
7.10.1 使用final阻止覆盖 277
7.10.2 使用final阻止继承 277
7.10.3 对数据成员使用final 278
7.11 Object类 279
7.12 小测验 280
第8章 包和接口 282
8.1 包 283
8.1.1 定义包 283
8.1.2 寻找包和CLASSPATH 284
8.1.3 一个包的小例子 285
8.2 包和成员访问 287
8.2.1 包访问示例 288
8.2.2 理解Protected成员 289
8.3 引入包 292
8.4 Java的类库包含在包中 294
8.5 接口 295
8.5.1 实现接口 296
8.5.2 使用接口句柄 300
8.5.3 项目8-1:创建一个Queue接口 303
8.5.4 接口中的变量 309
8.5.5 接口可以被继承 310
8.6 小测验 311
第9章 异常处理 313
9.1 异常层次 314
9.2 错误处理基础 314
9.2.1 使用try和catch 315
9.2.2 一个简单的异常示例 315
9.2.3 未捕获异常的后果 318
9.2.4 异常使你能够柔性地处理错误 320
9.3 使用多重catch语句 321
9.3.1 捕获子类异常 322
9.4 嵌套try块 324
9.5 掷出异常 325
9.5.1 重新掷出异常 326
9.6 进一步研究Throwable 328
9.7 使用finally 330
9.8 使用throws 332
9.9 Java的内建异常 334
9.10 创建异常子类 335
项目9-1:给Queue类添加异常 338
9.12 小测验 342
第10章 使用I/O 344
10.1 Java的I/O是依赖于流的 345
10.1.1 字节流和字符流 345
10.1.2 字节流类 346
10.1.3 字符流类 346
10.1.4 预定义流 347
10.2 使用字节流 348
10.2.1 读取控制台输入 349
10.2.2 写入控制台输出 350
10.3 使用字节流读写文件 351
10.3.1 从文件输入 351
10.3.2 写入文件 353
10.3.3 读写二进制数据 356
10.3.4 项目10-1:一个文件比较实用程序 360
10.4 随机文件访问 362
10.5 使用Java基于字符的流 365
10.5.1 使用字符流的控制台输入 366
10.5.2 使用字符流的控制台输出 369
10.5.3 使用字符流处理文件I/O 370
10.6 使用Java的类型包装器转换数字字符串 373
项目10-2:创建一个基于磁盘的Help系统 375
10.7 小测验 383
第11章 多线程编程 384
11.1 多线程基础 385
11.2 线程类和可运行接口 385
11.3 创建一个线程 386
11.3.1 一些简单的改进 390
11.3.2 项目11-1:继承Thread 392
11.4 创建多线程 395
11.5 决定何时一个线程结束 398
11.6 线程优先级 402
11.7 同步 406
11.7.1 使用同步方法 406
11.7.2 同步语句 409
11.8 使用notify()、wait()和notifyAll()进行线程间通信 412
11.8.1 一个使用wait()和notify()的例子 413
11.9 挂起、恢复和停止线程 418
项目11-2:使用主线程 422
11.10 小测验 424
第12章 applet、事件以及其他主题 425
12.1 applet基础 426
12.2 applet的组织和基本要素 429
12.2.1 applet架构 429
12.2.2 一个完整的applet框架 430
12.2.3 applet的初始化和终止 431
12.3 请求刷新 432
12.3.1 update()方法 433
12.3.2 项目12-1:一个简单的标题applet 433
12.4 使用状态窗口 438
12.5 给applet传递自变量 439
12.6 applet类 441
12.7 事件处理 442
12.8.1 事件 443
12.8.2 事件源 443
12.8 授权事件模型 443
12.8.4 事件类 444
12.8.5 事件接收器接口 444
12.8.3 事件接收器 444
12.9 使用授权事件模型 445
12.9.1 处理鼠标事件 446
12.9.2 一个简单的鼠标事件applet 446
12.10 更多Java关键字 449
12.10.1 transient和volatile修饰符 450
12.10.2 instanceof 450
12.12 native方法 451
12.13 下一步做什么? 451
12.11 strictfp 451
12.14 小测验 452
附录A 小测验答案 453
第1章 Java基础 454
第2章 介绍数据类型和运算符 456
第3章 程序控制语句 457
第4章 介绍类、对象和方法 461
第5章 更多数据类型和运算符 462
第6章 进一步研究方法和类 465
第7章 继承 470
第8章 包和接口 472
第9章 违例处理 473
第10章 使用I/O 476
第11章 多线程编程 480
第12章 applet、事件以及其他主题 482
附录B 使用Java的文档注释 489
B.1 javadoc标签 490
B.1.4 @exception 491
B.1.3 {@docRoot} 491
B.1.5 {@link} 491
B.1.2 @deprecated 491
B.1.1 @author 491
B.1.9 @serial 492
B.1.8 @see 492
B.1.10 @serialData 492
B.1.7 @return 492
B.1.6 @param 492
B.1.14 @version 493
B.1.13 @throws 493
B.2 文档注释的通用格式 493
B.1.12 @since 493
B.1.11 @serialField 493
B.3 javadoc的输出 494
B.4 一个使用文档注释的例子 494
5.1 数组 1466