译者序 1
前言 1
第1章 Java程序设计概述 1
1.1 Java程序设计平台 1
1.2 Java“白皮书”的关键术语 1
目录 1
1.2.1 简单性 2
1.2.2 面向对象 2
1.2.4 健壮性 3
1.2.5 安全性 3
1.2.3 分布式 3
1.2.6 体系结构中立 4
1.2.7 可移植性 4
1.2.8 解释型 5
1.2.9 高性能 5
1.2.10 多线程 5
1.2.11 动态性 5
1.3 Java与Internet 6
1.4 Java发展简史 7
1.5 关于Java的常见误解 9
2.1.1 下载JDK 13
2.1 安装Java开发工具箱 13
第2章 Java程序设计环境 13
2.1.2 设置执行路径 14
2.1.3 安装库源代码和文档 15
2.1.4 安装本书中的示例 16
2.1.5 导航Java目录 16
2.2 选择开发环境 17
2.3 使用命令行工具 17
2.4 使用集成开发环境 20
2.5 使用文本编辑器编译并运行程序 22
2.6 运行图形化应用程序 25
2.7 建立并运行applet 27
第3章 Java基本的程序设计结构 30
3.1 一个简单的Java应用程序 30
3.2 注释 33
3.3 数据类型 34
3.3.1 整型 34
3.3.2 浮点型 35
3.3.3 char类型 35
3.3.4 boolean类型 37
3.4 变量 37
3.4.1 初始化变量 38
3.5 运算符 39
3.4.2 常量 39
3.5.1 自增运算符与自减运算符 40
3.5.2 关系运算符与boolean运算符 41
3.5.3 位运算符 41
3.5.4 数学函数与常量 42
3.5.5 数值类型之间的转换 43
3.5.6 强制类型转换 44
3.5.7 括号与运算符级别 44
3.5.8 枚举类型 45
3.6.1 代码点与代码单元 46
3.6 字符串 46
3.6.2 子串 47
3.6.3 字符串编辑 47
3.6.4 拼接 48
3.6.5 检测字符串是否相等 49
3.6.6 阅读联机API文档 51
3.7 输入输出 53
3.7.1 读取输入 54
3.7.2 格式化输出 56
3.8 控制流程 59
3.8.1 块作用域 60
3.8.2 条件语句 60
3.8.3 循环 63
3.8.4 确定循环 65
3.8.5 多重选择——switch语句 68
3.8.6 中断控制流程语句 70
3.9 大数值 72
3.10 数组 74
3.10.1 “for each”循环 75
3.10.2 数组初始化器以及匿名数组 76
3.10.3 数组拷贝 76
3.10.4 命令行参数 77
3.10.5 数组排序 78
3.10.6 多维数组 80
3.10.7 不规则数组 83
第4章 对象与类 86
4.1 面向对象程序设计概述 86
4.1.1 OOP词汇表 87
4.1.2 对象 88
4.1.3 类之间的关系 89
4.1.4 OOP与传统的过程化程序设计技术对比 90
4.2 使用现有类 91
4.2.1 对象与对象变量 92
4.2.2 Java库中的GregorianCalendar类 94
4.2.3 更改器方法与访问器方法 95
4.3.1 一个Employee类 100
4.3 用户自定义类 100
4.3.3 解析Employee类 103
4.3.2 多个源文件的使用 103
4.3.4 从构造器开始 104
4.3.5 隐式参数与显式参数 105
4.3.6 封装的优点 106
4.3.7 基于类的访问权限 108
4.3.8 私有方法 108
4.3.9 final实例域 109
4.4 静态域与静态方法 109
4.4.1 静态域 109
4.4.3 静态方法 110
4.4.2 常量 110
4.4.4 Factory方法 111
4.4.5 main方法 112
4.5 方法参数 114
4.6 对象构造 119
4.6.1 重载 119
4.6.2 默认域初始化 119
4.6.3 默认构造器 120
4.6.4 显式域初始化 121
4.6.5 参数名 121
4.6.7 初始化块 122
4.6.6 调用另一个构造器 122
4.7 包 126
4.6.8 对象析构与finalize方法 126
4.7.1 类的导入 127
4.7.2 静态导入 128
4.7.3 将类放入包中 129
4.7.4 虚拟机如何定位类 131
4.7.5 包作用域 134
4.8 文档注释 135
4.8.1 注释的插入 135
4.8.3 方法注释 136
4.8.2 类注释 136
4.8.4 域注释 137
4.8.5 通用注释 137
4.8.6 包与概述注释 138
4.8.7 注释的抽取 138
4.9 类设计技巧 139
第5章 继承 142
5.1 类、超类和子类 142
5.1.1 继承层次 148
5.1.2 多态 148
5.1.3 动态绑定 149
5.1.4 阻止继承:final类和final方法 151
5.1.5 强制类型转换 152
5.1.6 抽象类 154
5.1.7 受保护的访问 158
5.2 Object:所有类的超类 159
5.2.1 equals方法 160
5.2.2 相等测试与继承 161
5.2.3 hashCode方法 163
5.2.4 toString方法 164
5.3 泛型数组列表 169
5.3.1 访问数组列表元素 171
5.3.2 类型化与原始数组列表的兼容性 175
5.4 对象包装器与自动打包 176
5.5 反射 179
5.5.1 Class类 180
5.5.2 使用反射分析类的能力 183
5.5.3 在运行时使用反射分析对象 187
5.5.4 使用反射编写通用的数组代码 191
5.5.5 方法指针 195
5.6 枚举类 198
5.7 继承设计技巧 199
6.1 接口 202
第6章 接口与内部类 202
6.1.1 接口的特性 207
6.1.2 接口与抽象类 208
6.2 对象克隆 209
6.3 接口与回调 213
6.4 内部类 216
6.4.1 使用内部类访问对象状态 217
6.4.2 内部类的特殊语法规则 220
6.4.3 内部类是否实用、必要和安全 220
6.4.4 局部内部类 222
6.4.5 匿名内部类 224
6.4.6 静态内部类 226
6.5 代理 229
第7章 图形程序设计 234
7.1 Swing概述 234
7.2 创建框架 237
7.3 框架定位 239
7.4 在面板中显示信息 243
7.5 2D图形 246
7.6 颜色 253
7.7 为文本设定特殊字体 256
7.8 图像 262
8.1 事件处理基础 267
第8章 事件处理 267
8.1.1 实例:处理按钮点击事件 269
8.1.2 建议使用内部类 273
8.1.3 将组件变成事件监听器 275
8.1.4 实例:改变观感 277
8.1.5 实例:捕获窗口事件 280
8.2 AWT事件继承层次 283
8.3 AWT的语义事件和低级事件 285
8.4 低级事件类型 287
8.4.1 键盘事件 287
8.4.2 鼠标事件 292
8.4.3 焦点事件 298
8.5 动作 302
8.6 多点传送 308
8.7 实现事件源 311
第9章 Swing用户界面组件 316
9.1 模型-视图-控制器设计模式 316
9.2 布局管理器概述 321
9.2.1 边界布局 322
9.2.2 面板 323
9.2.3 网格布局 324
9.3.1 文本域 328
9.3 文本输入 328
9.3.2 标签与标签组件 330
9.3.3 文本域变化跟踪 331
9.3.4 密码域 335
9.3.5 格式化的输入域 336
9.3.6 文本区 349
9.4 选择组件 352
9.4.1 复选框 353
9.4.2 单选按钮 355
9.4.3 边界 358
9.4.4 组合框 362
9.4.5 滑块 365
9.4.6 JSpinner组件 370
9.5 菜单 377
9.5.1 菜单创建 378
9.5.2 菜单项中的图标 380
9.5.3 复选框和单选按钮菜单项 381
9.5.4 弹出菜单 382
9.5.5 快捷键和加速器 383
9.5.6 启用和禁用菜单项 385
9.5.7 工具栏 389
9.5.8 工具提示 390
9.6 复杂的布局管理 393
9.6.1 箱式布局 395
9.6.2 网格组布局 398
9.6.3 弹簧布局 408
9.6.4 不使用布局管理器 415
9.6.5 定制布局管理器 416
9.6.6 遍历顺序 419
9.7 对话框 421
9.7.1 选项对话框 421
9.7.2 创建对话框 431
9.7.3 数据交换 434
9.7.4 文件对话框 440
9.7.5 颜色选择器 451
10.1 applet基础 456
第10章 部署applet和应用程序 456
10.1.1 一个简单的applet 457
10.1.2 查看applet 458
10.1.3 将应用程序转换为applet 460
10.1.4 applet的生命周期 461
10.1.5 安全基础 462
10.1.6 applet中的弹出式窗口 463
10.2 applet的HTML标记和属性 465
10.2.1 用于定位的applet属性 465
10.2.2 用于编码的applet属性 466
10.2.5 使用参数向applet传递信息 468
10.2.3 不支持Java兼容浏览器的applet属性 468
10.2.4 object标记 468
10.3 多媒体 473
10.3.1 封装URL 473
10.3.2 获取多媒体文件 473
10.4 applet上下文 475
10.4.1 applet间的通信 475
10.4.2 在浏览器中显示信息 475
10.4.3 书签applet 477
10.4.4 既是applet,又是应用程序 479
10.5 JAR文件 484
10.6 应用程序打包 485
10.6.1 清单文件 486
10.6.2 自运行JAR文件 486
10.6.3 资源 487
10.6.4 密封 490
10.7 Java Web Start 490
10.8 应用程序配置的存储 502
10.8.1 属性映射 502
10.8.2 系统信息 506
10.8.3 Preferences API 509
11.1 处理错误 515
第11章 异常与调试 515
11.1.1 异常分类 516
11.1.2 声明已检查异常 518
11.1.3 如何抛出异常 520
11.1.4 创建异常类 521
11.2 捕获异常 522
11.2.1 捕获多个异常 523
11.2.2 再次抛出异常与链异常 524
11.2.3 finally子句 525
11.2.4 堆栈跟踪元素分析 527
11.2.5 Java错误与异常处理 530
11.3 使用异常机制的建议 533
11.4 记录日志 537
11.4.1 基本日志 537
11.4.2 高级日志 537
11.4.3 修改日志管理器配置 539
11.4.4 本地化 540
11.4.5 处理器 541
11.4.6 过滤器 543
11.4.7 格式化器 544
11.5 使用断言 551
11.5.1 启用和禁用断言 552
11.5.2 使用断言的建议 553
11.6 调试技术 555
11.6.1 调试的常用技巧 555
11.6.2 使用控制台窗口 560
11.6.3 跟踪AWT事件 561
11.6.4 AWT的Robot类 565
11.7 使用调试器 568
11.7.1 JDB调试器 568
11.7.2 Eclipse调试器 573
第12章 流与文件 575
12.1 流 575
12.2 完整的流结构 577
12.2.1 流过滤器的分层 581
12.2.2 数据流 585
12.2.3 随机存取文件流 588
12.2.4 文本流 589
12.2.5 字符集 589
12.2.6 文本输出 595
12.2.7 文本输入 597
12.3 ZIP文件流 598
12.4 流的使用 605
12.4.1 分隔符输出 605
12.4.2 字符串记号处理器和带分隔符的文本 606
12.4.3 读取带分隔符的输入 607
12.4.4 StringBuilder类 611
12.4.5 随机存取流 612
12.5 对象流 617
12.5.1 存储可变类型的对象 617
12.5.2 理解对象序列化文件格式 620
12.5.3 保存对象引用问题的解决 624
12.5.4 理解对象引用的输出格式 629
12.5.5 修改默认的序列化机制 631
12.5.6 单元素与类型安全枚举的序列化 633
12.5.7 版本 634
12.5.8 使用序列化进行克隆 636
12.6 文件管理 638
12.7 新的I/O 643
12.7.1 内存映射文件 643
12.7.2 缓冲区数据结构 648
12.7.3 文件锁定 650
12.8 正则表达式 651
第13章 泛型程序设计 660
13.1 为什么要使用泛型程序设计 660
13.2 简单泛型类的定义 661
13.3 泛型方法 663
13.4 类型变量的限定 664
13.5 泛型代码和虚拟机 665
13.5.1 翻译泛型表达式 667
13.5.2 翻译泛型方法 667
13.5.3 调用遗留代码 669
13.6 约束与局限性 670
13.6.1 基本类型 670
13.6.2 运行时类型查询 670
13.6.3 异常 670
13.6.4 数组 671
13.6.5 泛型类型的实例化 671
13.6.7 擦除后的冲突 672
13.6.6 静态上下文 672
13.7 泛型类型的继承规则 673
13.8 通配符类型 674
13.8.1 通配符的超类型限定 675
13.8.2 无限定通配符 677
13.8.3 通配符捕获 677
13.9 反射和泛型 681
13.9.1 使用Class〈T〉参数进行类型匹配 682
13.9.2 虚拟机中的泛型类型信息 682
附录A Java关键字 687
附录B 更新的JDK 5.0代码 689