本书是一本Java 编程方面的优秀教材,秉承Deitel系列丛书的一贯特点:内容丰富、覆盖面广,提供详细代码与实例研究,总结出大量的面向对象编程技巧和经验。本书详细说明了在Java 中面向对象编程的基本理论及实用知识,以初学者为起点,由点到面、由浅入深、循序渐进地介绍了对象、继承、多态、接口、异常处理、JavaFX GUI、数据结构和集合、lambda与流、递归、搜索与排序、并发性、JDBC、JavaFX与多媒体、JShell 等,并且详细介绍了网络应用的开发与实践。第十一版在前一版的基础上增加了更多的实际案例,更新了很多内容,有助于读者学习和借鉴。本书包括更广泛的教学特性,其中列举了数百个可实际使用的程序,并给出了运行结果,可以使学生在学习时更为直观。
Paul Deitel,Deitel & Associates公司CEO兼CTO,具有超过35年计算机行业的工作经验,毕业于麻省理工学院。他拥有Java Certified Programmer和Java Certified Developer认证证书,并且被授予Oracle Java Champion称号。通过Deitel & Associates公司,他向行业客户提供了数以百计的编程课程,这些客户包括:Cisco,IBM, Siemens,Sun Microsystems(现在属于Oracle),Dell,Fidelity,NASA肯尼迪航天中心,美国国家风暴实验室,白沙导弹基地,Rogue Wave Software,Boeing,SunGard Higher Education,Nortel Networks,Puma,iRobot,Invensys,等等。他和合作者Harvey Deitel博士,是全球畅销的编程语言教材和专业图书/视频产品的作者。Harvey Deitel博士,Deitel & Associates公司主席兼首席战略官,具有55年以上的计算机行业工作经验。Deitel博士在麻省理工学院获得电子工程学士和硕士学位,在波士顿大学获得数学博士学位——在将计算机科学专业从这些专业分离出去之前,Deitel博士已经学习过计算机知识。他具有丰富的大学教学经验,在与儿子Paul于1991年创立Deitel & Associates公司之前,Deitel博士是波士顿大学计算机科学系主任并获得了终身教职。他们的出版物已经赢得了国际声誉,并被翻译成了日文、德文、俄文、西班牙文、法文、波兰文、意大利文、简体中文、繁体中文、韩文、葡萄牙文、希腊文、乌尔都文和土耳其文。Deitel博士为许多大公司、学术机构、政府部门和军队提供了数百场的专业编程培训。
张永健,国际关系学院副教授,毕业于北京邮电大学,专业为通信、计算机,目前从事网络及信息安全、移动互联网安全技术、大数据及多媒体安全等研究方向,并教授计算机安全等相关课程。
目 录
第1章 计算机、Internet与Java简介 1
1.1 简介 2
1.2 硬件和软件 3
1.3 数据层次 4
1.4 机器语言、汇编语言和高级语言 6
1.5 对象技术介绍 7
1.6 操作系统 9
1.7 编程语言 11
1.8 Java 12
1.9 典型的Java开发环境 12
1.10 测试驱动的Java应用 15
1.11 Internet和WWW 17
1.12 软件技术 19
1.13 Java问题解答 20
自测题 20
自测题答案 21
练习题 21
挑战题 22
第2章 Java应用介绍、输入/输出、运算符 23
2.1 简介 23
2.2 第一个Java程序:输出一行文本 24
2.3 修改第一个Java程序 28
2.4 使用printf显示文本 29
2.5 另一个Java程序:整数相加 30
2.6 内存概念 33
2.7 算术运算 34
2.8 判断:相等性和关系运算符 36
2.9 小结 39
总结 39
自测题 41
自测题答案 42
练习题 44
挑战题 47
第3章 类、对象、方法与String简介 48
3.1 简介 48
3.2 实例变量、set方法和get方法 49
3.3 Account类:使用构造方法初始化对象 56
3.4 包含浮点数余额的Account类 58
3.5 基本类型与引用类型的比较 61
3.6 (选修)GUI与图形实例:一个简单的GUI 62
3.7 小结 67
总结 67
自测题 70
自测题答案 71
练习题 71
挑战题 72
第4章 控制语句(1)及赋值、++与- -运算符 73
4.1 简介 73
4.2 算法 74
4.3 伪代码 74
4.4 控制结构 74
4.5 if单选择语句 76
4.6 if...else双选择语句 77
4.7 Student类:嵌套if...else语句 79
4.8 while循环语句 81
4.9 形成算法:计数器控制循环 82
4.10 形成算法:标记控制循环 85
4.11 形成算法:嵌套控制语句 90
4.12 复合赋值运算符 93
4.13 增量运算符和减量运算符 94
4.14 基本类型 96
4.15 (选修)GUI与图形实例:事件处理、画线 96
4.16 小结 104
总结 104
自测题 107
自测题答案 108
练习题 109
挑战题 113
第5章 控制语句(2)及逻辑运算符 115
5.1 简介 115
5.2 计数器控制循环的实质 116
5.3 for循环语句 116
5.4 使用for语句的示例 119
5.5 do...while循环语句 122
5.6 switch多选择语句 123
5.7 AutoPolicy类实例:switch语句中的字符串 127
5.8 break和continue语句 130
5.9 逻辑运算符 131
5.10 结构化编程小结 135
5.11 (选修)GUI与图形实例:绘制矩形和椭圆 138
5.12 小结 141
总结 141
自测题 143
自测题答案 144
练习题 145
挑战题 148
第6章 方法:深入探究 149
6.1 简介 149
6.2 Java中的程序单元 150
6.3 静态方法、静态字段和Math类 151
6.4 声明多参数方法 152
6.5 关于声明与使用方法的说明 155
6.6 方法调用栈与活动记录 156
6.7 实参提升与强制转换 157
6.8 Java API包 158
6.9 案例分析:安全的随机数生成方法 159
6.10 案例分析:机会游戏与enum类型 162
6.11 声明的作用域 165
6.12 方法重载 167
6.13 (选修)GUI与图形实例:颜色和填充图形 169
6.14 小结 171
总结 171
自测题 174
自测题答案 175
练习题 176
挑战题 180
第7章 数组与ArrayList 181
7.1 简介 182
7.2 数组 182
7.3 声明和创建数组 183
7.4 数组使用举例 184
7.5 异常处理:处理不正确的反馈值 190
7.6 案例分析:模拟洗牌和发牌 191
7.7 增强型for语句 194
7.8 将数组传入方法 195
7.9 按值传递与按引用传递 196
7.10 案例分析:GradeBook类用数组保存成绩 197
7.11 多维数组 201
7.12 案例分析:使用二维数组的GradeBook类 203
7.13 变长实参表 207
7.14 使用命令行实参 208
7.15 Arrays类 210
7.16 集合和ArrayList类简介 212
7.17 (选修)GUI与图形实例:画圆弧 214
7.18 小结 216
总结 216
自测题 219
自测题答案 219
练习题 220
拓展内容:建立自己的计算机 227
挑战题 231
第8章 类与对象:深入探究 233
8.1 简介 233
8.2 Time类案例分析 234
8.3 对成员的访问控制 237
8.4 用this引用访问当前对象的成员 237
8.5 Time类案例分析:重载构造方法 239
8.6 默认构造方法与无实参构造方法 243
8.7 set方法和get方法 243
8.8 组合 244
8.9 enum类型 246
8.10 垃圾回收 248
8.11 静态类成员 249
8.12 静态导入 251
8.13 final实例变量 252
8.14 包访问 253
8.15 将BigDecimal用于精确的货币计算 254
8.16 (选修)GUI与图形实例:使用包含图形的对象 255
8.17 小结 258
总结 258
自测题 261
自测题答案 261
练习题 261
挑战题 264
第9章 面向对象编程:继承 265
9.1 简介 265
9.2 超类与子类 266
9.3 protected成员 267
9.4 超类与子类的关系 268
9.5 子类的构造方法 282
9.6 Object类 283
9.7 比较组合和继承的差异 283
9.8 小结 285
总结 285
自测题 286
自测题答案 286
练习题 286
第10章 面向对象编程:多态和接口 289
10.1 简介 289
10.2 多态示例 290
10.3 演示多态行为 291
10.4 抽象类和抽象方法 293
10.5 案例分析:使用多态的工资系统 295
10.6 超类和子类变量之间允许的赋值 305
10.7 final方法和final类 305
10.8 分析从构造方法调用方法时的问题 306
10.9 创建和使用接口 306
10.10 Java SE 8的接口强化 312
10.11 Java SE 9的私有接口方法 313
10.12 私有构造方法 314
10.13 使用接口继承而非实现继承 314
10.14 (选修)GUI与图形实例:利用多态性画图 316
10.15 小结 317
总结 318
自测题 320
自测题答案 321
练习题 321
挑战题 322
第11章 异常处理:深入探究 323
11.1 简介 323
11.2 示例:除数为0时没有处理异常 324
11.3 示例:处理ArithmeticException异常和InputMismatchException 异常 326
11.4 何时使用异常处理 330
11.5 Java异常层次 330
11.6 finally语句块 332
11.7 栈解退和从异常获得信息 336
11.8 链式异常 338
11.9 声明新的异常类型 339
11.10 前置条件和后置条件 340
11.11 断言 340
11.12 try-with-resources:自动释放资源 341
11.13 小结 342
总结 343
自测题 345
自测题答案 345
练习题 346
第12章 JavaFX GUI(1) 347
12.1 简介 347
12.2 JavaFX Scene Builder 348
12.3 JavaFX程序窗口的结构 349
12.4 Welcome程序——显示文本和图像 350
12.5 Tip Calculator程序——事件处理 353
12.6 后续有关JavaFX章节中的主题 365
12.7 小结 365
总结 366
自测题 369
自测题答案 370
练习题 370
挑战题 370
第13章 JavaFX GUI(2) 372
13.1 简介 372
13.2 在场景图中布局节点 373
13.3 Painter程序:RadioButton、鼠标事件和形体 374
13.4 Color Chooser程序:属性绑定和属性监听器 381
13.5 Cover Viewer程序:数据驱动的GUI及JavaFX集合 386
13.6 Cover Viewer程序:定制ListView单元格 389
13.7 其他JavaFX功能 392
13.8 JavaFX 9:Java SE 9 JavaFX的更新 394
13.9 小结 395
总结 395
自测题 400
自测题答案 401
练习题 401
第14章 字符串、字符与正则表达式 402
14.1 简介 402
14.2 字符和字符串基础 403
14.3 String类 403
14.4 StringBuilder类 413
14.5 Character类 418
14.6 标记化String 421
14.7 正则表达式及Pattern类和Matcher类 422
14.8 小结 427
总结 428
自测题 430
自测题答案 431
练习题 431
拓展内容:字符串操作练习题 432
拓展内容:处理字符串的挑战项目 434
挑战题 435
第15章 文件、输入/输出流、NIO与XML序列化 436
15.1 简介 436
15.2 文件和流 437
15.3 使用NIO类和接口来获得文件和目录信息 438
15.4 顺序文本文件 440
15.5 XML序列化 447
15.6 FileChooser和DirectoryChooser对话框 452
15.7 (选修)其他的java.io类 456
15.8 小结 458
总结 458
自测题 461
自测题答案 462
练习题 462
挑战题 464
第16章 泛型集合 465
16.1 简介 465
16.2 集合概述 466
16.3 类型包装器类 467
16.4 自动装箱和自动拆箱 467
16.5 Collection接口和Collections类 467
16.6 List 468
16.7 Collections方法 473
16.8 PriorityQueue类和Queue接口 481
16.9 Set 482
16.10 Map 484
16.11 同步集合 487
16.12 不可修改集合 487
16.13 抽象实现 488
16.14 Java SE 9:用于不可变集合的便利工厂方法 488
16.15 小结 490
总结 491
自测题 493
自测题答案 493
练习题 494
第17章 lambda与流 496
17.1 简介 497
17.2 流和聚合 498
17.3 映射和lambda 500
17.4 过滤 503
17.5 元素如何在流管道中移动 504
17.6 方法引用 505
17.7 IntStream操作 507
17.8 函数式接口 510
17.9 lambda:深入探究 511
17.10 Stream<Integer>操作 512
17.11 Stream<String>操作 515
17.12 Stream<Employee>操作 516
17.13 根据文件创建Stream<String> 524
17.14 随机值流 526
17.15 无限流 528
17.16 lambda事件处理器 529
17.17 关于Java SE 8接口的更多说明 529
17.18 小结 530
总结 530
自测题 536
自测题答案 537
练习题 538
第18章 递归 541
18.1 简介 541
18.2 递归概念 542
18.3 使用递归示例:阶乘 542
18.4 利用BigInteger重新实现FactorialCalculator类 544
18.5 使用递归示例:Fibonacci序列 545
18.6 递归与方法调用栈 547
18.7 递归与迭代的比较 548
18.8 汉诺塔 550
18.9 分形 551
18.10 递归回溯 559
18.11 小结 559
总结 560
自测题 561
自测题答案 562
练习题 562
第19章 搜索、排序与大O记法 566
19.1 简介 566
19.2 线性搜索 567
19.3 大O记法 569
19.4 二分搜索 570
19.5 排序算法 573
19.6 选择排序 574
19.7 插入排序 576
19.8 合并排序 578
19.9 本章的搜索和排序算法的效率小结 582
19.10 大规模并行处理与并行算法 583
19.11 小结 583
总结 583
自测题 585
自测题答案 585
练习题 585
挑战题 587
第20章 泛型类和泛型方法:深入探究 588
20.1 简介 588
20.2 泛型方法的由来 588
20.3 泛型方法:实现及编译时翻译 590
20.4 其他编译时翻译问题:将类型参数用作返回类型的方法 592
20.5 重载泛型方法 594
20.6 泛型类 595
20.7 接收类型参数的方法中的通配符 599
20.8 小结 602
总结 602
自测题 604
自测题答案 604
练习题 604
第21章 定制泛型数据结构 606
21.1 简介 606
21.2 自引用类 607
21.3 动态内存分配 607
21.4 链表 608
21.5 栈 617
21.6 队列 620
21.7 树 621
21.8 小结 626
总结 626
自测题 628
自测题答案 629
练习题 629
拓展内容:建立自己的编译器 634
第22章 JavaFX图形与多媒体 644
22.1 简介 644
22.2 利用CSS控制字体 645
22.3 显示二维形体 650
22.4 Polyline、Polygon和Path 654
22.5 变换 658
22.6 利用Media、MediaPlayer和MediaViewer播放视频 659
22.7 Transition动画 664
22.8 Timeline动画 668
22.9 利用AnimationTimer实现逐帧动画 670
22.10 在Canvas上绘图 671
22.11 三维形体 675
22.12 小结 678
总结 678
自测题 683
自测题答案 684
练习题 684
第23章 并发性 691
23.1 简介 691
23.2 线程状态与生命周期 693
23.3 用Executor框架创建并执行线程 695
23.4 线程同步 698
23.5 没有同步的生产者/消费者关系 704
23.6 生产者/消费者关系:ArrayBlockingQueue 710
23.7 (进阶)具有synchronized、wait、notify及notifyAll的生产者/消费者关系 712
23.8 (进阶)生产者/消费者关系:有界缓冲区 716
23.9 (进阶)生产者/消费者关系:Lock接口和Condition接口 722
23.10 并发集合 727
23.11 JavaFX中的多线程 728
23.12 利用Java SE 8的日期/时间API为sort/parallelSort计时 737
23.13 Java SE 8:串行流与并行流 739
23.14 (进阶)Callable接口和Future接口 740
23.15 (进阶)Fork/Join框架 744
23.16 小结 744
总结 745
自测题 750
自测题答案 751
练习题 752
第24章 利用JDBC访问数据库 754
24.1 简介 755
24.2 关系数据库 755
24.3 books数据库 756
24.4 SQL 759
24.5 设置Java DB数据库 764
24.6 连接并查询数据库 766
24.7 查询books数据库 769
24.8 RowSet接口 778
24.9 PreparedStatement 780
24.10 存储过程 788
24.11 事务处理 789
24.12 小结 789
总结 790
自测题 794
自测题答案 794
练习题 794
第25章 JShell简介:Java SE 9中用于交互式Java的REPL 797
25.1 简介 798
25.2 安装JDK 9 799
25.3 JShell简介 799
25.4 JShell中的命令行输入 807
25.5 声明并使用类 808
25.6 JShell的自动补全功能 811
25.7 探索类成员并查看文档 812
25.8 声明方法 817
25.9 异常处理 818
25.10 导入类并将包添加到CLASSPATH 819
25.11 使用外部编辑器 820
25.12 JShell命令汇总 822
25.13 代码段编辑的快捷键 826
25.14 JShell如何重新解释Java以供交互使用 827
25.15 IDE JShell支持 827
25.16 小结 827
自测题 828
自测题答案 830
在线章节 840
附录A 运算符优先级表 841
附录B ASCII字符集 843
附录C 关键字和保留字 844
附录D 基本类型 845
附录E 使用调试器 846
在线附录 856
索引 857