目 录
第1章 计算机及Java简介 1
1.1 计算机基础 1
1.1.1 硬件与内存 2
1.1.2 程序 4
1.1.3 编程语言与编译器 5
1.1.4 Java字节码 6
1.1.5 链接 8
1.2 设计程序 8
1.2.1 面向对象编程 9
1.2.2 封装 10
1.2.3 多态 10
1.2.4 继承 11
1.2.5 若大家学习过某种其他编程语言 12
1.2.6 算法 12
1.2.7 可重用组件 13
1.2.8 测试与调试 14
陷阱:对付陷阱 15
陷阱:隐藏式错误 15
1.3 Java体验 15
1.3.1 Java语言简史 16
1.3.2 Applet 16
1.3.3 第一个Java应用程序 17
1.3.4 编译Java程序或类 22
1.3.5 运行Java程序 23
1.3.6 Applet实例预览(选修) 24
1.4 本章小结 27
1.5 自测题答案 27
1.6 编程练习 29
第2章 原型、字符串与交互式I/O 31
2.1 原型与表达式 31
2.1.1 变量 32
2.1.2 Java标识符 35
陷阱:Java区分大小写 36
2.1.3 原型 37
2.1.4 赋值语句 38
2.1.5 专用赋值运算符 39
2.1.6 简单输入与输出 40
2.1.7 数字常量 41
2.1.8 赋值兼容性 42
2.1.9 类型强转 43
Java提示:将字符强转成整数 45
编程提示:初始化变量 46
陷阱:浮点数的不精确性 46
2.1.10 算术运算符 48
2.1.11 括号与优先规则 49
案例研究:零售机兑换 51
2.1.12 递增/递减运算符 56
2.1.13 递增/递减运算符更多相关信息 57
2.2 String类 58
2.2.1 字符串常量与变量 58
2.2.2 字符串连接 59
2.2.3 类 60
2.2.4 String方法 61
2.2.5 字符串处理 63
2.2.6 转义字符 64
2.2.7 Unicode字符集 65
2.3 键盘与屏幕I/O 67
2.3.1 屏幕输出 67
2.3.2 SavitchIn输入 70
2.3.3 其他输入方法 72
陷阱:readInt与readDouble 74
编程提示:回显输入 74
2.4 文档与样式 75
编程提示:使用有意义的变量名 76
2.4.1 文档与注释 76
2.4.2 缩进 78
2.4.3 命名式常量 80
2.5 本章小结 83
2.6 自测题答案 83
2.7 编程练习 86
第3章 控制流 89
3.1 分支语句 89
3.1.1 if-else语句 89
3.1.2 布尔表达式介绍 93
陷阱:在字符串中使用== 96
编程提示:按字母顺序比较 98
3.1.3 嵌套语句与复合语句 100
Java提示:else与if的配对关系 101
3.1.4 多分支的if-else语句 103
编程示例:评等级分 104
3.1.5 switch语句 107
陷阱:忽略break语句 110
3.1.6 条件操作符(选修) 110
3.2 Java中的循环语句 113
3.2.1 while语句 113
Java提示:while循环能够执行零次迭代 117
3.2.2 do-while语句 117
编程示例:害虫成灾 119
陷阱:无限循环 123
3.2.3 for语句 124
3.2.4 for语句中的逗号(选修) 128
陷阱:循环语句中的多余分号 129
Java提示:选择一种循环语句 131
3.2.5 循环中的break语句 131
陷阱:break语句的误用 133
3.2.6 exit方法 133
3.3 循环在编程中的应用 135
3.3.1 循环体 135
3.3.2 初始化语句 137
3.3.3 终止循环 138
编程示例:嵌套循环 140
编程提示:不要在循环体中声明变量 141
3.3.4 循环中的错误 143
3.3.5 变量跟踪 144
3.4 布尔类型 146
3.4.1 布尔表达式与布尔变量 146
编程提示:布尔变量的命名 148
3.4.2 优先级规则 148
3.4.3 布尔值的输入和输出 151
案例研究:使用布尔变量来结束循环 151
3.5 本章小结 154
3.6 自测题答案 155
3.7 编程练习 159
第4章 定义类与方法 163
4.1 类与方法定义 163
4.1.1 类文件与独立编译 165
4.1.2 实例变量 165
4.1.3 使用方法 169
4.1.4 空方法定义 171
4.1.5 有返回值的方法 173
Java提示:空方法中return的使用 175
4.1.6 this参数 177
4.1.7 局部变量 179
4.1.8 块 181
陷阱:在块中声明的变量 181
Java提示:在for语句中声明变量 181
4.1.9 原型参数 182
陷阱:参数与参量概念的使用 187
4.1.10 类与方法的定义语法小结 187
4.2 信息隐藏与封装 188
4.2.1 信息隐藏 189
编程提示:参数名对方法是局部有效的 189
4.2.2 前提注释与结果注释 189
Java提示:断言检查 190
4.2.3 public和private修饰语 192
编程提示:实例变量应为私有 195
编程示例:Purchaes类 199
4.2.4 封装 203
4.2.5 用Javadoc自动生成文档 205
4.2.6 UML类图 205
4.3 对象与引用 206
4.3.1 类类型变量和对象 207
陷阱:类类型变量中=和==的使用 211
Java提示:为类设计equals方法 213
4.3.2 布尔值方法 219
4.3.3 类参数 221
4.3.4 类参数与原型参数的比较 224
4.4 本章小结 229
4.5 自测题答案 229
4.6 编程练习 234
第5章 关于对象与方法的更多知识 237
5.1 方法编程 238
5.1.1 调用其他方法的方法 238
编程提示:设置辅助方法为私有方法 243
Java提示:恰当地设置编译器 243
陷阱:Null指针异常 244
5.2 静态方法与静态变量 245
5.2.1 静态方法 245
陷阱:在静态方法中调用非静态方法 247
Java提示:可以在类中加入一个main方法 250
5.2.2 静态变量(选修) 252
5.2.3 Math类 254
5.2.4 Integer类、Double类和其他包装类 257
5.3 设计方法 260
案例研究:格式化输出 260
5.3.1 自顶向下的设计 267
5.3.2 测试方法 268
5.4 重载 269
5.4.1 重载的基本要求 270
编程示例:Pet类 272
陷阱:重载与自动类型转换 275
陷阱:无法根据返回值的类型来实现重载 277
编程示例:类Money 279
5.5 构造函数 285
5.5.1 定义构造函数 285
编程提示:可以在构造函数中使用其他方法 293
陷阱:忽略默认构造函数 294
陷阱:许多包装类不具有默认构造函数 294
5.6 信息隐藏重访 295
陷阱:私密泄漏 295
5.7 包 298
5.7.1 包和导入 299
5.7.2 包名与目录 299
陷阱:在类路径中没有包含当前目录 301
5.7.3 命名冲突 302
5.8 本章小结 303
5.9 自测题答案 304
5.10 编程练习 309
第6章 数组 311
6.1 数组基础 311
6.1.1 数组的创建与访问 312
6.1.2 数组详解 315
编程提示:使用单数数组名 316
6.1.3 length实例变量 317
Java提示:数组索引从零开始 318
编程提示:使用for循环遍历数组 319
陷阱:数组索引超出边界 319
6.1.4 初始化数组 320
6.2 类与方法中的数组 321
案例研究:销售报表 322
6.2.1 索引式变量用做方法参量 329
6.2.2 整个数组用做方法参量 331
6.2.3 方法main的参量 332
陷阱:数组中=与==的用法 333
6.2.4 返回数组的方法 336
6.3 数组及类的编程 339
编程示例:一个专用清单类 340
6.3.1 部分填充的数组 346
6.3.2 搜索数组 347
陷阱:返回一个数组实例变量 347
6.4 排序数组 349
6.4.1 选择排序 350
6.4.2 其他排序算法 354
6.5 多维数组 354
6.5.1 多维数组基础 356
6.5.2 多维数组参数与返回值 358
6.5.3 多维数组的实现 360
6.5.4 不整齐的数组(选修) 363
编程示例:员工时间记录 364
6.6 本章小结 370
6.7 自测题答案 370
6.8 编程练习 374
第7章 继承 378
7.1 继承基础 378
编程示例:Person类 379
7.1.1 派生类 380
7.1.2 覆盖方法定义 383
7.1.3 覆盖与重载的对比 383
7.1.4 final限定词 384
陷阱:使用基类的私有实例变量 384
编程提示:假定合作者心怀叵测 385
陷阱:私有方法并不被继承 386
7.1.5 UML继承示意图 386
7.2 继承的编程 388
7.2.1 派生类中的构造函数 388
7.2.2 this方法(选修) 390
7.2.3 调用被覆盖的方法 390
编程示例:多层派生类 391
7.2.4 重载与覆盖的一个微妙之处(选修) 395
Java提示:不能使用多重super 396
编程提示:对象可以具有多种类型 396
编程提示:"是一个"与"有一个"间的关系 399
7.2.5 Object类 400
案例研究:字符式图形 402
7.2.6 抽象类 412
7.2.7 接口(选修) 415
7.3 动态绑定与多态 417
7.3.1 动态绑定 417
7.3.2 类型检查与动态绑定 419
7.3.3 toString的动态绑定 420
7.3.4 多态 421
Java提示:较好的equals方法(选修) 421
7.4 本章小结 424
7.5 自测题答案 424
7.6 编程练习 429
第8章 异常处理 431
8.1 异常处理基础 432
8.1.1 Java中的异常 432
8.1.2 预定义类Exception 443
8.1.3 ArrayIndexOutOfBoundsException(备选排序) 444
8.2 定义异常类 445
8.2.1 定义自己的异常类 445
Java提示:定义异常类时保留getMessage 449
编程提示:何时定义异常类 450
8.3 使用异常类 455
8.3.1 声明异常(转移包袱) 455
8.3.2 不须捕获的异常 460
8.3.3 AssertionError类(选修) 461
8.3.4 多重抛出与捕获 461
Java提示:首先捕获较专用的异常 463
编程提示:异常处理与信息隐藏 464
陷阱:滥用异常 466
编程提示:何时抛出异常 466
陷阱:嵌套式try-catch语句块 468
8.3.5 finally语句块(选修) 468
8.3.6 重新抛出异常(选修) 469
案例研究:行式计算器 470
8.4 本章小结 482
8.5 自测题答案 483
8.6 编程练习 486
第9章 流与文件I/O 490
9.1 流与文件I/O概述 490
9.1.1 流的概念 491
9.1.2 为什么要使用文件进行I/O? 491
9.1.3 文本文件与二进制文件之间的区别 491
9.2 文本文件I/O 492
9.2.1 文本文件输出:PrintWriter 493
陷阱:try语句块是一种语句块 498
陷阱:覆盖文件 499
Java提示:追加至文本文件 499
Java提示:使用toString用于文本文件输出 500
9.2.2 文本文件输入:BufferedReader 505
编程示例:从键盘上读取文件名 510
Java提示:使用路径名 510
9.2.3 StringTokenizer类 511
Java提示:测试文本文件的末尾 513
9.2.4 FileReader类与FileOutputStream类 515
9.2.5 解析SavitchIn类 517
9.3 File类 518
使用File类 518
9.4 二进制文件I/O基础 521
9.4.1 输出至二进制文件:使用ObjectOutputStream 522
9.4.2 writeUTF的一些细节(选修) 527
9.4.3 从二进制文件中读取输入:使用ObjectInputStream 528
陷阱:对文本文件使用ObjectInputStream 531
陷阱:定义方法以打开流 532
9.4.4 EOFException类 533
陷阱:忘记检查文件末尾 535
陷阱:以错误的方式检查文件末尾 535
9.4.5 FileInputStream类与FileOutputStream类 536
编程示例:处理二进制数据文件 537
9.5 对象流的对象I/O 540
9.5.1 类对象的二进制I/O 541
陷阱:异常、异常、还是异常 546
9.5.2 Serializable接口 547
陷阱:在同一文件中混合多种类类型 547
9.5.3 二进制文件中的数组对象 547
9.6 本章小结 550
9.7 自测题答案 550
9.8 编程练习 555
第10章 动态数据结构 557
10.1 向量 557
10.1.1 使用向量 558
编程提示:往向量中添加元素 563
陷阱:向量元素的类型为Object 563
10.1.2 比较向量和数组 565
陷阱:使用capacity代替size 567
Java提示:使用trimToSize来节省内存 567
陷阱:使用方法clone 567
Java提示:新的集合类(选修) 569
10.2 链接数据结构 569
10.2.1 链表 569
陷阱:空指针异常 577
陷阱:私密泄露 578
10.2.2 内部类 578
10.2.3 结点内部类 579
10.2.4 迭代器 585
编程提示:内部迭代器和外部迭代器 595
10.2.5 链表的异常处理 595
10.2.6 链表的变体 599
10.2.7 其他的链接数据结构 600
10.3 本章小结 601
10.4 自测题答案 601
10.5 编程练习 612
第11章 递归 614
11.1 递归的基本概念 614
案例研究:单词的位数 615
11.1.1 递归的工作原理 619
陷阱:无限递归 622
11.1.2 递归定义与迭代定义 625
11.1.3 带返回值的递归方法 628
11.2 使用递归进行编程 631
编程提示:不断询问直到用户弄对为止 632
案例研究:二分查找 633
编程提示:将问题一般化 639
编程示例:归并排序-递归排序算法 640
11.3 本章小结 644
11.4 自测题答案 645
11.5 编程练习 647
第12章 递归窗口界面--Swing 650
12.1 背景 650
12.1.1 GUI--图形用户界面 651
12.1.2 事件驱动编程 651
12.2 Swing详解初步 653
陷阱:在运行Swing程序时保存全部工作 653
编程示例:一个简单的窗口 653
Java提示:终止Swing程序 658
陷阱:忘记编程"关闭窗口"按钮 658
陷阱:忘记使用getContentPane 658
12.2.1 窗口监听器详解 659
12.2.2 屏幕对象的尺寸单位 660
12.2.3 setVisible详解 661
编程示例:本章第一个Swing程序的改进版 663
编程示例:带颜色的窗口 666
12.2.4 JFrame类的一些方法 670
12.2.5 布局管理器 671
12.3 按钮与动作监听器 677
编程示例:添加按钮 678
12.3.1 按钮 680
12.3.2 动作监听器与动作事件 681
陷阱:修改actionPerformed的参数列表 685
12.3.3 界面 686
Java提示:为GUI的外观与动作分别编码 687
12.3.4 "模型-视图-控制器"模式 687
Java提示:使用setActionCommand方法 688
12.4 容器类 690
12.4.1 JPanel类 691
12.4.2 Container类 693
Java提示:简单窗口界面的构建指南 695
12.5 GUI的文本I/O 697
12.5.1 文本区与文本框 697
编程示例:标签化一个文本框 703
12.5.2 输入/输出数字 705
编程示例:GUI累加器 708
12.5.3 捕获NumberFormatException 711
12.6 本章小结 715
12.7 自测题答案 716
12.8 编程练习 722
第13章 Applet和HTML 725
13.1 applet 726
13.1.1 applet基本知识 726
13.1.2 运行Applet小程序 729
编程示例:加法器applet小程序 729
Java提示:把Swing应用程序转换成applet小程序 731
13.1.3 在Applet小程序中添加图标 731
13.2 HTML介绍 734
13.2.1 HTML基本知识 734
编程提示:一个简单的HTML文档框架 736
13.2.2 插入超链接 739
陷阱:不使用重新加载(刷新)按钮 740
13.2.3 显示图片 740
编程提示:HTML是一种低级语言 741
13.3 HTML页面中的Applet小程序 741
13.3.1 在HTML文档中放置applet小程序 742
Java提示:Applet查看器重访 744
陷阱:使用老版本的网络浏览器 744
13.3.2 老版本的applet类(选修) 745
13.3.3 applet小程序与安全 746
13.4 本章小结 746
13.5 自测题答案 746
13.6 编程练习 747
第14章 更多的Swing 749
14.1 菜单 749
编程示例:带有菜单的GUI 750
14.1.1 菜单栏、菜单与菜单项 750
14.1.2 嵌套菜单 754
14.2 让GUI更漂亮(功能更强) 756
14.2.1 添加图标 756
陷阱:调整按钮大小 762
14.2.2 滚动条与JScrollPane类 762
14.2.3 添加边框 767
陷阱:忘记引入javax.Swing.border 772
14.3 更多的布局管理器 772
14.3.1 BoxLayout管理器类 773
14.3.2 Struts和Glue 776
陷阱:在其他布局管理器中使用strut和glue 777
14.3.3 设置组件间间隔 778
14.3.4 Box容器类 778
14.3.5 CardLayout管理器 781
14.4 内部类 786
辅助类 786
14.5 事件与监听器的进一步讨论 788
14.5.1 WindowListener接口 788
Java提示:关闭窗口按钮的编程 793
Java提示:setDefaultCloseOperation的进一步介绍 796
编程示例:可见性可变的组件 797
14.5.2 更新GUI的更多细节 800
14.6 再探Swing类层次结构 801
14.6.1 按钮、菜单和抽象按钮 801
Java提示:JMenuItem类的其他构造函数 802
Java提示:还有很多Swing类和方法 802
14.7 本章小结 803
14.8 自测题答案 804
14.9 编程练习 808
附录1 关键字 810
附录2 优先规则 811
附录3 Unicode字符集 812
附录4 SavitchIn 813
附录5 Protected和Package修饰语 828
附录6 十进制格式化类 829
附录7 迭代器接口 832
附录8 复制 833
附录9 Javadoc 836
附录10 JOptionPane类 838
附录11 C++与Java之间的区别 843
词汇表 847
END USER LICENSE AGREEMENTS 852
