第1章 Java入门 1
引言 2
前导知识 2
1.1 Java简介 2
1.1.1 Java语言的起源(选读) 2
1.1.2 对象和方法 3
1.1.3 applet(选读) 4
1.1.4 Java应用程序实例 4
自测题 6
1.1.5 字节码和Java虚拟机 6
1.1.6 类装载器(选读) 8
1.1.7 编译一个Java程序或类 8
1.1.8 运行一个Java程序 8
自测题 10
1.2 表达式和赋值语句 10
1.2.1 标识符 10
1.2.2 变量 11
1.2.3 赋值语句 12
1.2.4 再论赋值语句(选读) 14
自测题 15
1.2.5 赋值兼容性 15
1.2.6 常量 16
1.2.7 算术运算符和表达式 17
1.2.8 括号和优先规则(选读) 18
1.2.9 整数和浮点数除法 19
自测题 21
1.2.10 类型转换 22
1.2.11 自增运算符和自减运算符 22
自测题 24
1.3 String类 24
1.3.1 字符串常量和变量 25
1.3.2 字符串连接 25
1.3.3 类 26
1.3.4 String类的方法 27
1.3.5 转义序列 31
1.3.6 字符串处理 32
1.3.7 Unicode字符集(选读) 32
自测题 33
1.4 程序风格 33
1.4.1 命名常量 34
1.4.2 Java拼写约定 35
1.4.3 注释 36
1.4.4 缩进 37
自测题 37
小结 38
自测题参考答案 38
编程项目 40
第2章 控制台输入和输出 43
引言 44
前导知识 44
2.1 屏幕输出 44
2.1.1 System.out.println 44
自测题 46
2.1.2 用printf格式化输出 46
自测题 50
2.1.3 使用NumberFormat格式化金额 51
2.1.4 导入包和类 53
自测题 54
2.1.5 DecimalFormat类(选读) 54
2.2 使用Scanner类的控制台输入 57
2.2.1 Scanner类 57
2.2.2 空字符串 62
自测题 63
2.2.3 其他输入分隔符 63
自测题 64
小结 66
自测题参考答案 66
编程项目 67
第3章 控制流 69
引言 70
前导知识 70
3.1 分支结构 70
3.1.1 if-else语句 70
3.1.2 省略else 71
3.1.3 复合语句 71
3.1.4 嵌套语句 73
自测题 73
3.1.5 多分支if-else语句 73
自测题 75
3.1.6 switch语句 75
自测题 78
3.1.7 条件运算符(选读) 79
3.2 布尔表达式 79
3.2.1 简单的布尔表达式 79
3.2.2 字典顺序和字母顺序 81
自测题 83
3.2.3 构造布尔表达式 83
自测题 84
3.2.4 布尔表达式计算 85
3.2.5 短路求值与完整求值 87
3.2.6 优先级和结合规则 88
自测题 93
3.3 循环 94
3.3.1 while语句和do-while语句 94
3.3.2 算法和伪码 96
自测题 97
3.3.3 for语句 98
3.3.4 for语句中的逗号 100
3.3.5 嵌套循环 103
自测题 103
3.3.6 break语句和continue语句(选读) 105
3.3.7 exit语句 106
3.4 调试 106
3.4.1 循环bug 106
3.4.2 跟踪变量 107
3.4.3 常规调试技术 108
3.4.4 预防性编码 111
3.4.5 断言检查(选读) 112
自测题 114
小结 115
自测题参考答案 115
编程项目 118
第4章 类的定义(Ⅰ) 121
引言 122
前导知识 122
4.1 类的定义 122
4.1.1 实例变量和方法 124
自测题 126
4.1.2 再论方法 126
自测题 130
4.1.3 局部变量 131
4.1.4 代码块 131
自测题 132
4.1.5 原语类型的参数 132
自测题 137
4.1.6 类参数的简单情况 137
4.1.7 this参数 137
自测题 139
4.1.8 返回布尔值的方法 139
4.1.9 equals和toString方法 141
4.1.10 递归方法 143
自测题 144
4.2 信息隐藏和封装 145
4.2.1 public和private修饰符 145
自测题 149
4.2.2 取值和赋值方法 149
4.2.3 前条件和后条件 152
自测题 152
4.3 重载 152
自测题 157
4.4 构造方法 158
4.4.1 构造方法定义 158
自测题 165
4.4.2 默认的变量初始化 165
4.4.3 另一种初始化实例变量的方法 165
4.4.4 StringTokenizer类(选读) 169
自测题 171
小结 172
自测题参考答案 172
编程项目 175
第5章 类的定义(Ⅱ) 179
引言 180
前导知识 180
5.1 静态方法和静态变量 180
5.1.1 静态方法 180
自测题 185
5.1.2 静态变量 185
自测题 188
5.1.3 Math类 188
自测题 191
5.1.4 包装类 191
5.1.5 自动的装箱和拆箱 192
自测题 193
5.1.6 包装类中的静态方法 193
自测题 196
5.2 引用和类参数 196
5.2.1 变量与存储器 196
5.2.2 引用 198
5.2.3 类参数 201
自测题 205
5.2.4 null常量 205
5.2.5 new运算符和匿名对象 206
自测题 208
5.3 引用的使用和滥用 209
自测题 215
5.3.1 拷贝构造方法 216
自测题 220
5.3.2 可变的类与不可变的类 220
自测题 222
5.4 包和iavadoc 222
5.4.1 包和import语句 223
5.4.2 java.lang包 223
5.4.3 包名和目录 224
5.4.4 默认包 226
5.4.5 规定编译时使用的类路径(选读) 227
5.4.6 名称冲突(选读) 227
自测题 227
5.4.7 javadoc简介(选读) 228
5.4.8 针对javadoc的类注释(选读) 228
5.4.9 运行javadoc(选读) 229
自测题 231
小结 232
自测题参考答案 232
编程项目 235
第6章 数组 239
引言 240
前导知识 240
6.1 数组概述 240
6.1.1 数组的创建和访问 240
6.1.2 length实例变量 243
6.1.3 数组初始化 244
自测题 245
6.2 数组与引用 247
6.2.1 数组是对象 247
6.2.2 数组参数 249
自测题 252
6.2.3 main方法的自变量(选读) 253
6.2.4 返回一个数组的方法 254
自测题 255
6.3 数组编程 255
6.3.1 部分填充的数组 255
自测题 257
6.3.2 “for-each”循环 262
6.3.3 参数个数不定的方法(选读) 263
自测题 265
6.3.4 数组实例变量的隐私泄露 267
自测题 268
自测题 271
6.3.5 枚举类型(选读) 271
自测题 276
6.4 多维数组 276
6.4.1 多维数组基本知识 276
6.4.2 使用length实例变量 278
自测题 278
6.4.3 不规则数组 278
6.4.4 多维数组类型的参数和返回值 279
自测题 283
小结 284
自测题参考答案 284
编程项目 289
第7章 继承 293
引言 294
前导知识 294
7.1 有关继承的基础知识 294
7.1.1 派生类 294
7.1.2 方法定义的覆盖 301
7.1.3 改变被覆盖的方法的返回类型 301
7.1.4 改变被覆盖的方法的访问权限 302
自测题 303
7.1.5 super构造方法 303
7.1.6 this构造方法 305
自测题 307
7.2 封装和继承 309
自测题 311
7.3 继承编程 315
7.3.1 访问重新定义的基类方法 315
自测题 317
7.3.2 Obiect类 317
7.3.3 定义equals的正确方法 318
自测题 322
小结 323
自测题参考答案 323
编程项目 326
第8章 多态性和抽象类 329
引言 330
前导知识 330
8.1 多态性 330
8.1.1 后绑定 330
8.1.2 final修饰符 332
自测题 336
8.1.3 toString方法的后绑定 337
8.1.4 向下类型转换和向上类型转换 339
自测题 341
8.1.5 初识clone方法 342
8.2 抽象类 346
自测题 350
小结 351
自测题参考答案 351
编程项目 352
第9章 异常处理 355
引言 356
前导知识 356
9.1 异常处理基础知识 356
9.1.1 try-throw-catch机制 360
9.1.2 异常类 363
9.1.3 标准包中的异常类 363
自测题 364
9.1 .4 定义异常类 364
自测题 370
9.1.5 多个catch块 372
自测题 374
9.2 在方法中抛出异常 375
9.2.1 在一个方法中抛出一个异常 375
9.2.2 在throws子句中声明异常 376
9.2.3 捕获或声明规则的例外情况 378
9.2.4 派生类中的throws子句 380
9.2.5 何时使用异常 380
9.2.6 事件驱动的编程 381
自测题 381
9.3 有关异常处理的其他编程技术 382
9.3.1 finally块 383
自测题 383
9.3.2 重抛异常 384
9.3.3 AssertionError类 384
9.3.4 处理Scanner类的异常 384
自测题 386
9.3.5 ArrayIndexOutofBounds-Exception 386
小结 387
自测题参考答案 387
编程项目 390
第10章 文件I/O 393
引言 394
前导知识 394
10.1 文件I/O概述 394
10.1.1 流 394
10.1.2 文本文件和二进制文件 395
自测题 395
10.2 文本文件 395
10.2.1 写入文本文件 396
10.2.2 把数据追加到文本文件 400
自测题 401
10.2.3 从文本文件中读取数据 402
10.2.4 使用Scanner类读取文本文件 402
10.2.5 用Scanner测试文本文件的结束 404
自测题 408
10.2.6 使用BufferedReader读取文本文件 408
自测题 410
10.2.7 用BufferedReader测试文本文件的结束 411
自测题 412
10.2.8 路径名 412
10.2.9 嵌套的构造方法调用 413
自测题 414
10.2.10 System.in、System.out和System.err 414
自测题 415
10.3 File类 415
自测题 418
10.4 二进制文件 418
10.4.1 将简单的数据写入二进制文件中 419
10.4.2 UTF和writeUTF 422
自测题 423
10.4.3 从二进制文件读取简单数据 423
自测题 425
10.4.4 检查二进制文件的结束 426
自测题 427
10.4.5 对象的二进制输入/输出 427
10.4.6 Serializable接口 430
10.4.7 二进制文件中的数组对象 430
自测题 432
10.5 二进制文件的随机访问 432
自测题 436
小结 437
自测题参考答案 437
编程项目 440
第11章 递归 443
引言 444
前导知识 444
11.1 递归的void方法 444
11.1.1 递归调用跟踪 446
11.1.2 深入了解递归 449
自测题 450
11.1.3 递归栈(选读) 451
11.1.4 递归与迭代 452
自测题 453
11.2 返回一个值的递归方法 453
自测题 456
11.3 递归思想 456
11.3.1 递归的设计技术 456
11.3.2 折半查找(选读) 457
11.3.3 折半查找的效率(选读) 462
自测题 463
小结 464
自测题答案 464
编程项目 467
第12章 UML和模式 469
引言 470
前导知识 470
12.1 UML 470
12.1.1 UML的发展史 471
12.1.2 UML类图 471
12.1.3 类的交互 471
12.1.4 继承图 472
12.1.5 再论UML 473
自测题 473
12.2 模式 473
12.2.1 适配器模式(选读) 474
12.2.2 模型-视图-控制器模式(选读) 474
12.2.3 排序模式的局限性 479
12.2.4 排序模式的效率(选读) 479
12.2.5 模式的形式化方法 480
自测题 480
小结 481
自测题参考答案 481
编程项目 482
第13章 接口和内部类 485
引言 486
前导知识 486
13.1 接口 486
13.1.1 接口 486
13.1.2 实现接口的抽象类 488
13.1.3 派生接口 489
自测题 489
13.1.4 Comparable接口 490
自测题 494
13.1.5 接口中已定义的常量 494
自测题 496
13.1.6 Serializable接口(选读) 497
13.1.7 Cloneable接口 497
自测题 500
13.2 内部类的简单应用 500
13.2.1 辅助类 500
自测题 504
13.2.2 内部类的.class文件 504
13.3 内部类的深入介绍 504
13.3.1 静态的内部类 505
自测题 505
13.3.2 公有的内部类 505
自测题 508
13.3.3 内部类的嵌套 508
13.3.4 内部类和继承 509
13.3.5 匿名类 509
自测题 511
小结 512
自测题参考答案 512
编程项目 515
第14章 泛型和ArrayList类 517
引言 518
前导知识 518
14.1 ArrayList类 518
14.1.1 使用ArrayList类 519
自测题 523
14.1.2 ArrayList类中的方法 523
14.1.3 for-each循环 525
自测题 527
自测题 530
14.1.4 Vector类 530
14.1.5 参数化的类和泛型 531
14.2 泛型 531
14.2.1 泛型基础知识 531
14.2.2 类型参数的限制 538
14.2.3 泛型方法(选读) 540
14.2.4 泛型类的继承(选读) 541
自测题 543
小结 544
自测题参考答案 544
编程项目 545
第15章 链式数据结构 547
引言 548
前导知识 549
15.1 Java链表 549
15.1.1 使用链表 552
自测题 555
15.1.2 内部节点类 556
自测题 558
15.1.3 链表的equals方法 562
15.2 拷贝构造方法和clone方法(选读) 563
15.2.1 简单的拷贝构造方法和clone方法(选读) 563
15.2.2 异常(选读) 565
自测题 570
15.3 迭代器 571
15.3.1 定义一个迭代器类 571
15.3.2 添加和删除节点 575
自测题 578
15.4 链表的变体 578
15.4.1 双向链表 578
自测题 585
15.4.2 栈数据结构 585
自测题 586
15.4.3 队列数据结构 586
自测题 588
15.4.4 运行时间和大O表示法 588
自测题 592
15.4.5 链表的效率 592
15.5 链式散列表 592
15.5.1 字符串的散列函数 594
15.5.2 散列表的效率 596
自测题 596
15.6 集 596
15.6.1 集的基本操作 599
15.6.2 使用链表的集的效率 600
自测题 601
15.7 树 601
15.7.1 树的属性 601
15.7.2 二叉查找树的效率(选读) 606
自测题 607
小结 608
自测题参考答案 608
编程项目 612
第16章 集合、映射和迭代器 615
引言 616
前导知识 616
16.1 集合 616
16.1.1 通配符 617
16.1.2 集合框架 618
自测题 623
16.1.3 具体的集合类 623
自测题 629
16.1.4 ArrayList〈T〉和Vector〈T〉之间的区别 629
16.1.5 集合框架的非参数化版本(选读) 629
16.2 映射 630
自测题 635
16.3 迭代器 635
16.3.1 迭代器概念 635
16.3.2 Iterator〈T〉接口 635
16.3.3 列表迭代器 638
自测题 641
小结 642
自测题参考答案 642
编程项目 643
第17章 初探Swing 647
引言 648
前导知识 648
17.1 事件驱动的编程 648
17.2 按钮、事件和其他Swing基础知识 650
自测题 654
17.2.1 按钮 654
17.2.2 操作监听器和操作事件 655
自测题 657
自测题 659
17.2.3 标签 659
17.2.4 颜色 660
自测题 662
17.3 容器和布局管理器 663
17.3.1 布局管理器 663
17.3.2 FlowLayout布局管理器 666
17.3.3 网格布局管理器 666
自测题 668
17.3.4 面板 669
17.3.5 Container类 672
自测题 674
17.3.6 模型-视图-控制器模式(选读) 674
自测题 675
17.4 菜单和按钮 675
17.4.1 菜单条、菜单和菜单项 676
17.4.2 嵌套菜单(选读) 678
17.4.3 AbstractButton类 679
17.4.4 setActionCommand方法 681
17.4.5 监听器作为内部类(选读) 682
自测题 684
17.5 文本字段和文本区域 684
17.5.1 文本区域和文本字段 684
自测题 689
17.5.2 一个Swing计算器 690
自测题 693
小结 694
自测题参考答案 694
编程项目 699
第18章 深入Swing 701
引言 702
前导知识 702
18.1 窗口监听器 702
18.1.1 dispose方法 706
18.1.2 WindowAdapter类 706
自测题 707
18.2 图标和滚动条 707
18.2.1 窗标 707
自测题 712
18.2.2 滚动条 712
自测题 716
18.3 Graphics类 718
18.3.1 图形对象的坐标系 718
18.3.2 paint方法和Graphics类 719
18.3.3 绘制椭圆形 722
18.3.4 绘制弧线 722
自测题 725
18.3.5 圆角矩形(选读) 725
18.3.6 面板的paintComponent 726
18.3.7 动作绘画和repaint 727
18.3.8 关于GUI更新的更多细节(选读) 729
18.4 颜色 729
18.4.1 规定一种绘图颜色 730
18.4.2 定义颜色 730
18.4.3 JColorChooser对话窗口 732
自测题 734
18.5 字体和drawString方法 734
18.5.1 drawString方法 734
18.5.2 字体 736
自测题 738
小结 739
自测题参考答案 739
编程项目 742
第19章 Java的发展永无止境 745
引言 746
前导知识 746
19.1 多线程 746
19.1.1 Thread.sleep 748
19.1.2 getGraphics方法 749
19.1.3 使用线程修复非响应性程序 750
19.1.4 Thread类 750
19.1.5 Runnable接口(选读) 752
自测题 754
19.2 流套接字联网 754
19.2.1 套接字 755
19.2.2 套接字和线程 757
自测题 758
19.3 JavaBean 758
19.3.1 组件模型 758
19.3.2 JavaBean模型 759
自测题 759
19.4 Java和数据库连接 759
19.4.1 SQL 760
19.4.2 JDBC 761
自测题 761
小结 762
自测题答案 762
编程项目 762
附录1 关键字 766
附录2 运算优先级和结合规则 767
附录3 Unicode字符集 768
附录4 printf的格式规范 769
附录5 类和接口小结 770