XIX35512.11.5示例学习:替换文本41211.3.3调用父类的方法-41435612.12从Web上读取数据11.4方法重写·...41635712.13示例学习:Web爬虫11.5方法重写与重载..418关键术语11.6Object类及其toStringO方法359本章小结+41811.7多态..359测试题419.*.36011.8动态绑定编程练习.*41911.9对象转换和instanceof运算符363第13章抽象类和接口42411.10Object类的equals方法36742411.11ArrayList类36813.1引言-对于列表有用的方法+.....374抽象类42411.1213.2..示例学习:自定义栈类........374为何要使用抽象方法..42711.1313.2.137611.14protected数据和方法13.2.2抽象类的几点说明42837813.3示例学习:抽象的Number类42911.15防止扩展和重写关键术语37813.4示例学习:Calendar和431本章小结·379.GregorianCalendar379434测试题13.5接口编程练习题38013.6Comparable接口436.+?440第12章异常处理和文本/O38413.7Cloneable接口.38413.8接口与抽象类44412.1引言.12.2异常处理概述38513.9示例学习:Rationa1类+.+.44738913.10类的设计原则45212.3异常类型内聚性452..39113.10.112.4关于异常处理的更多知识..13.10.2一致性··452声明异常·39212.4.1392封装性·452抛出异常13.10.312.4.239313.10.4清晰性···45312.4.3捕获异常完整性*45339413.10.512.4.4从异常中获取信息示例学习:声明、抛出和13.10.6实例和静态45312.4.5捕获异常39613.10.7继承与聚合454:399接口和抽象类45412.5final1y子句13.10.8454400关键术语12.6何时使用异常*401本章小结45512.7重新抛出异常455·402测试题12.8链式异常..403编程练习题*45512.9创建自定义异常类-.3ile.·405第14章JavaFX基础45912.10..12.11文件输入和输出:40814.1引言:45914.2JavaFX与Swing以及AWT的12.11.1使用Printwriter写数据..408比较·45912.11.2使用try-with-resources..自动关闭资源..40914.3JavaFX程序的基本结构.460使用Scanner读数据41014.4··46212.11.3面板、UI组件以及形状·:465Scanner如何工作4114.5属性绑定12.11.4
XIX 11.3.3 调用父类的方法 11.4 方法重写 11.5 方法重写与重载 11.6 Object类及其toString()方法 . 11.7 多态 11.8 动态绑定 11.9 对象转换和instanceoffe算符 . 11.10 Object类的equals方法 11.11 ArrayList类 11.12 对于列表有用的方法 11.13 示例学习:自定义栈类 11.14 protected数据和方法 11.15 防止扩展和重写 关键賴 林小结 »1试题 编程练习题 第12章异常处理和文本I /O 12.1 |弓 言 12.2 异常处理概述 12.3 异常类型 12.4 关于异常处理的更多知识. 12.4.1 声明异常 12.4.2 抛出异常 12.4.3 捕获异常 12.4.4 从异常中获取信息 12.4.5 示例学习:声明、抛出和 捕获异常 12.5 finally^? ^ !] 12.6 何时使用异常 12.7 重新抛出异常 12.8 链式异常 12.9 创建自定义异常类 12.10 File类 12.11 文件输人和输出 12.11.1 使用PrintWriter写數据 . 12.11.2 使用try-with-resources 自动关闭资源 12.11.3 使用Scanner读數据 12.11.4 Scanner如何工作 12.11.5 示例学习:替换文本. 412 12.12 从Web上读取数据 414 12.13 示例学习:Web爬虫 416 关键术语 418 本章小结 418 测试题 419 编程练习 419 第13章抽象类和接口 424 13.1 引言 424 13.2 抽象类 424 13.2.1 为何要使用抽象方法 427 13.2.2 抽象类的几点说明 428 13.3 示例学习:抽象的Number类 . 429 13.4 不例学习:Calendar和 CregorianCalendar 431 13.5 接口 434 13.6 Comparable接口 436 13.7 Cloneable接口 440 13.8 接口与抽象类 444 13.9 示例学习: Rational类 447 13.10 类的设计原则 452 13.10.1 内聚性 452 13.10.2 一致性 452 13.10.3 封装性 452 13.10.4 清晰性 453 13.10.5 完整性 453 13.10.6 实例和静态 453 13.10.7 继承与聚合 454 13.10.8 接口和抽象类 454 关键术语 454 本章小结 455 测试题 455 编程练习题 455 第14章 JavaFX基础 459 14.1 引言 459 14.2 JavaFX与Swing以及AWT的 比较 459 14.3 JavaFX程序的基本结构 460 14.4 面板、UI组件以及形状 462 14.5 属性绑定 465 355 356 357 359 359 360 363 367 368 374 374 376 378 378 379 379 380 384 384 385 389 391 392 392 393 394 396 399 400 401 402 403 405 408 408 409 410 411
XX14.6节点的通用属性和方法..468测试题536Color类469编程练习题53614.7Font类14.8470第16章JavaFXUI组件和多媒体..54214.9Image和ImageView类47216.1引言542·47414.10布局面板16.2543Labeled和Label:47516.3按钮54514.10.1FlowPane-47714.10.2GridPane..16.4复选框547.47814.10.316.5单选按钮*549BorderPane.14.10.4HBox和VBox.48016.6文本域***551形状48216.7文本区域55314.11.*48214.11.1Text16.8组合框-556..14.11.2Line48416.9列表视图559:48514.11.316.10滚动条·562Rectangle14.11.4*48716.11滑动条*564Circle和E11ipse*488示例学习:开发一个井字14.11.516.12Arc游戏14.11.6.....491567Polygon和polyline..+..示例学习:ClockPane类49314.1216.13视频和音频572关键术语497示例学习:国旗和国歌57516.14本章小结498本章小结577测试题498测试题578编程练习题498编程练习题578第15章事件驱动编程和动画504584第17章二进制1/O.引言50415.117.1584.引言50615.2事件和事件源17.2在Java中如何处理文本IO·**584.50715.3注册处理器和处理事件17.3文本I/O与二进制I/O58515.4内部类51117.4二进制I/O类·58715.5匿名内部类处理器512FileInputStream和17.4.115.6使用lambda表达式简化事件:588FileOutputStream处理514Fi1terInputStream和17.4.2315.7..517示例学习:贷款计算器FilteroutputStream.....59015.8鼠标事件51917.4.3DataInputStream和115.9键盘事件520DataoutputStream.........59052315.10可观察对象的监听器BufferedInputStream和17.4.4动画52515.11BufferedoutputStream..59452515.11.1PathTransition17.5示例学习复制文件59652815.11.2598FadeTransition17.6对象I/O15.11.3530Timeline.17.6.1Serializable接口.60053215.12示例学习:弹球....60117.6.2序列化数组关键术语..53560217.7随机访问文件+++.--*本章小结535关键术语606
XX 14.6 节点的通用属性和方法 . 14.7 Color类 14.8 Font类 14.9 Image和ImageView类 14.10 布局面板 14.10.1 FlowPane 14.10.2 GridPane 14.10.3 BorderPane 14.10.4 HBox和VBox 14.11 形状 14.11.1 Text 14.11.2 Line 14.11.3 Rectangle 14.11.4 Circle和Ellipse 14.11.5 Arc 14.11.6 Polygon和Polyline . . 14.12 示例学习:(:100&?3116类 关键术语 - - 本章小结 臓题 编程练习题 第15章事件驱动编程和动画 . 15.1 引言 15.2 事件和事件源 15.3 注册处理器和处理事件 . 15.4 内部类 15.5 匿名内部类处理器 15.6 使用lambda^ 达式简化事件 utm 15.7 示例学习:贷款计算器 . 15.8 鼠标事件 15.9 键盘事件 15.10 可观察对象的监听器. 15.11 动画 15.11.1 PathTransition 15.11.2 FadeTransition 15.11.3 Timeline 15.12 示例学习:弹球 关键术语 林小结 测试题 536 编程练习题 536 第16章 JavaFXUI组件和多媒体 . . 542 16.1 引言 542 16.2 Labeled和Label 543 16.3 按钮 545 16.4 复选框 547 16.5 单选按钮 549 16.6 文本域 551 16.7 文本区域 553 16.8 组合框 556 16.9 列表视图 559 16.10 滚动条 562 16.11 滑动条 564 16.12 示例学习:开发一个井字 游戏 567 16.13 视频和音频 572 16.14 示例学习:国旗和国歌 575 本章小结 577 测试题 578 编程练习题 578 第17章 二 进 制 I/O 584 17.1 引言 584 17.2 在Java中如何处理文本I/O 584 17.3 文本I/O与二进制I/O 585 17.4 二进制I/O类 587 17.4.1 FilelnputStream和 Fi1eOutputStrean 588 17.4.2 FilterlnputStream和 Fi1terOutputStream 590 17.4.3 DatalnputStream和 DataOutputStream 590 17.4.4 BufferedlnputStream和 BufferedOutputStream 594 17.5 示例学习:复制文件 596 17.6 对象I/O 598 17.6.1 Serializable接口 600 17.6.2 序列化数组 601 17.7 随机访问文件 602 关键雜 606 468 469 470 472 474 475 477 478 480 482 482 484 485 487 488 491 493 497 498 498 498 504 504 506 507 511 512 514 517 519 520 523 525 525 528 530 532 535 535
XXI本章小结60618.10尾递归628关键术语629测试题606629606本章小结编程练习题+.测试题*630第18章递归609编程练习题63060918.1引言++610附录AJava关键字63718.2示例学习:计算阶乘附录BASCII字符集63818.3示例学习:计算斐波那契数613使用递归解决问题615附录C63918.4操作符优先级表61718.5递归辅助方法附录DJava修饰符640..·618递归选择排序18.5.1.附录E6415特殊浮点值61818.5.2递归二分查找附录F数系642示例学习:得到目录的大小…61918.6位操作.·*646附录G62118.7示例学习:汉诺塔附录H正则表达式64762418.8示例学习:分形-附录1枚举类型651·62718.9递归与选代
XXI 林小结 测试题 编程练习题 第18章递归 18.1 引言 18.2 示例学习:计算阶乘 18.3 示例学习:计算斐波那契数 18.4 使用递归解决问题 18.5 递归辅助方法 18.5.1 递归选择排序 18.5.2 递归二分查找 18.6 示例学习:得到目录的大小 18.7 示例学习:汉诺塔 18.8 示例学习:分形 18.9 递归与迭代 18.10 尾递归 628 关键术语 629 林小结 629 «1试题 630 编程练习题 630 附录A Java关键字 637 附录B ASCII字符集 638 附录C 操作符优先级表 639 附录D Java修饰符 640 附录E 特殊浮点值 641 附录F 数系 642 附录G 位操作 646 附录H 正则表达式 647 附录丨枚举类型 651 606 606 606 609 609 610 613 615 617 618 618 619 621 624 627
1第1章Introduction to Java Programming, Comprehension Version, Tenth Edition计算机、程序和Java概述教学目标。理解计算机基础知识、程序和操作系统(1.2~1.4节)。阐述Java与万维网(WorldWideWeb)之间的关系(1.5节)。·理解Java语言规范、API、JDK和IDE的含义(1.6节)。。编写一个简单的Java程序(1.7节)。?在控制台上显示输出(1.7节)。●解释Java程序的基本语法(1.7节)。e创建、编译和运行Java程序(1.8节)。。使用良好的Java程序设计风格和编写正确的程序文档(1.9节)。。解释语法错误、运行时错误和逻辑错误的区别(1.10节)。●使用NetBeans开发Java程序(1.11节)使用Eclipse开发Java程序(1.12节)。1.1引言6要点提示:本书的主旨是学习如何通过编写程序来解决问题。本书是关于程序设计(又称编程)的。那么,什么是程序设计呢?程序设计就是创建(或者开发)软件,软件也称为程序。简言之,软件包含了指令,告诉计算机(或者计算设备)做什么。软件遍布我们的周围,甚至在一些你认为可能不需要软件的设备中。当然,你会希望在个人计算机上找到和使用软件;但软件在运行中的飞机、汽车、手机甚至烤面包机中同样起着作用。在个人计算机上,你会使用字处理程序编写文档,使用Web浏览器在互联网中冲浪,使用电子邮件程序收发电子邮件。这些程序都是软件的实例。软件开发人员在称为程序设计语言的强大工具的帮助下创建软件。本书使用Java程序设计语言来教授如何创建程序。程序设计语言有很多种,有些语言已有几十年的历史。每种语言都是为了实现某个特定的目的而发明的,比如,构建在以前语言的长处之上,或者为程序员提供一套全新和独特的工具。当知道有如此多可用的程序设计语言后,你自然会困惑哪种程序设计语言是最好的。但是,事实上,没有“最好”的语言。每种语言有它自已的长处和短处。有经验的程序员知道某种语言可能在某种场景下工作得很好,但是在另外一个场景中可能另外一个语言会更加合适。因此,经验丰富的程序员将尽可能掌握各种不同的程序设计语言,从而利用各种强大的软件开发工具。如果你掌握了一种程序设计语言,应该会很容易学会其他程序设计语言。关键是学习如何使用程序设计方法来解决问题,这是本书的主旨。我们即将开始一段激动人心的旅程,学习如何进行程序设计。在开始之前,很有必要复习一下计算机基础、程序和操作系统等内容。如果你已经很熟悉CPU、内存、磁盘、操作系统以及程序设计语言等术语,那么可以跳过1.2~1.4节中对这些内容的回顾
I 第 1 章 I Introduction to Java Programming, Comprehension Version,Tenth Edition | 计算机、 程序和 Java 概述 教学目标 理解计算机基础知识、程序和操作系统(1.2 1.4 节)。 阐述 Java 与万维网(World Wide Web) 之间的关系(1.5 节)。 理解 Java 语言规范、API、JDK 和 IDE 的含义(1.6 节)。 编写一个简单的 Java 程序(1.7 节)。 在控制台上显示输出( 1.7 节)。 解释 Java 程序的基本语法(丨.7 节)。 创建、编译和运行 Java 程序( 1.8 节)。 使用良好的 Java 程序设计风格和编写正确的程序文档( 1.9 节)。 解释语法错误、运行时错误和逻辑错误的区别(1.10 节)。 使用 NetBeans 开发 Java 程序( 1.11 节)。 使用 Eclipse 开发 Java 程序( 1.12 节)。 1 . 1 引 言 〆要点提示:本书的主旨是学习如何通过编写程序来解决问題。 本书是关于程序设计(又称编程)的。那么,什么是程序设计呢?程序设计就是创建(或者 开发)软件,软件也称为程序。简言之,软件包含了指令,告诉计算机(或者计算设备)做什么。 软件遍布我们的周围,甚至在一些你认为可能不需要软件的设备中。当然,你会希望在 个人计算机上找到和使用软件;但软件在运行中的飞机、汽车、手机甚至烤面包机中同样起 着作用。在个人计算机上,你会使用字处理程序编写文档,使用 Web 浏览器在互联网中冲 浪,使用电子邮件程序收发电子邮件。这些程序都是软件的实例。软件开发人员在称为程序 设计语言的强大工具的帮助下创建软件。 本书使用Java 程序设计语言来教授如何创建程序。程序设计语言有很多种,有些语言 已有几十年的历史。每种语言都是为了实现某个特定的目的而发明的,比如,构建在以前语 言的长处之上,或者为程序员提供一套全新和独特的工具。当知道有如此多可用的程序设计 语言后,你自然会困惑哪种程序设计语言是最好的。但是,事实上,没有 “最好” 的语言。 每种语言有它自己的长处和短处。有经验的程序员知道某种语言可能在某种场景下工作得很 好,但是在另外一个场景中可能另外一个语言会更加合适。因此,经验丰富的程序员将尽可 能掌握各种不同的程序设计语言,从而利用各种强大的软件开发工具。 如果你掌握了一种程序设计语言,应该会很容易学会其他程序设计语言。关键是学习如 何使用程序设计方法来解决问题,这是本书的主旨。 我们即将开始一段激动人心的旅程,学习如何进行程序设计。在开始之前,很有必要复 习一下计算机基础、程序和操作系统等内容。如果你已经很熟悉 CPU、内存、磁盘、操作 系统以及程序设计语言等术语,那么可以跳过 1.2 1.4 节中对这些内容的回顾
第1章21.2什么是计算机6要点提示:计算机是存储和处理数据的电子设备。计算机包括硬件(hardware)和软件(software)两部分。一般来说,硬件包括计算机中可以看得见的物理部分,而软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特定的任务。学习一种程序设计语言,并不一定要了解计算机硬件知识,但是如果你了解一些硬件知识的话,它的确可以帮助你更好地理解程序中指令对于计算机及其组成部分的功效。本节介绍计算机硬件组件及其功能。一台计算机是由以下几个主要的硬件组件构成的(图1-1):。中央处理器(CPU)·内存(主存)·存储设备(例如,磁盘和光盘)。输入设备(例如,鼠标和键盘)●输出设备(例如,显示器和打印机)。通信设备(例如,调制解调器和网卡)总线+41中央输入设备存储设备内存通信设备输出设备处理器如显示器如键盘和如磁盘、光盘如调制解调器和网卡鼠标和打印机和磁带图1-1计算机由中央处理器、内存、存储设备、输入设备、输出设备和通信设备组成这些组件通过一个称为总线(bus)的子系统连接。你可以将总线想象成一个连接计算机组件的道路系统,数据和电信号通过总线在计算机的各个部分之间传输。在个人计算机中,总线搭建在主板上,主板是一个连接计算机各个部分的电路板。1.2.1中央处理器中央处理器(CentralProcessingUnit,CPU)是计算机的大脑。它从内存中获取指令,然后执行这些指令。CPU通常由两部分组成:控制单元(controlunit)和算术/逻辑单元(arithmetic/logicunit)。控制单元用于控制和协调其他组件的动作。算术/逻辑单元用于完成数值运算(加法、减法、乘法、除法)和逻辑运算(比较)。现在的CPU都是构建在一块小小的硅半导体芯片上,这块芯片上包含数百万称为晶体管的小电路开关,用于处理信息。每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。这些脉冲用于控制和同步各种操作的步调。时钟速度越快,在给定时间段内执行的指令就越多。时钟速度的计量单位是赫兹(hertz,Hz),1赫兹相当于每秒1个脉冲。20世纪90年代计算机的时钟速度通常是以兆赫(MHz)来表示的(1MHz就是100万Hz)。随着CPU的速度不断提高,目前计算机的时钟速度通常以千兆赫(GHz)来表述。Intel公司最新处理器的运行速度大约是3GHz最初被开发出来的CPU只有一个核(core)。核是处理器中实现指令读取和执行的部分
2 第!幸 1 . 2 什么是计算机 〆要点提示:计算机是存储和处理数据的电子设备 计算机包括硬件( hardware ) 和软件( software) 两部分。一般来说,硬件包括计算机中 可以看得见的物理部分,而软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特 定的任务。学习一种程序设计语言,并不一定要了解计算机硬件知识,但是如果你了解一些 硬件知识的话,它的确可以帮助你更好地理解程序中指令对于计算机及其组成部分的功效。 本节介绍计算机硬件组件及其功能。 一台计算机是由以下几个主要的硬件组件构成的(图 1 - 1 ): 中央处理器(CPU) 内存(主存) 存储设备(例如,磁盘和光盘) 输入设备(例如,鼠标和键盘) 输出设备(例如,显示器和打印机) 通信设备(例如,调制解调器和网卡) 总线 1 I #繼#丨 姑 1 丁 中央丨 处理器 1 丁 通信设备 ~ r 输人设备1 1 # 出设彳 如磁盘、光盘 如调制解调器 如键盘和 如显示器 和磁带 和网卡 鼠标 和打印机 图 1 - 1 计算机由中央处理器、内存、存储设备、 输人设备、输出设备和通信设备组成 这些组件通过一个称为总线(bus ) 的子系统连接。你可以将总线想象成一个连接计算机 组件的道路系统,数据和电信号通过总线在计算机的各个部分之间传输。在个人计算机中, 总线搭建在主板上,主板是一个连接计算机各个部分的电路板。 1.2.1 中央处理器 中央处理器( Central Processing Unit, CPU) 是计算机的大脑。它从内存中获取指令, 然后执行这些指令。CPU 通常由两部分组成:控制单元(control unit) 和算术 / 逻辑单元 (arithmetic/logic unit)0 控制单元用于控制和协调其他组件的动作。算术 / 逻辑单元用于完成 数值运算(加法、减法、乘法、除法)和逻辑运算(比较)。 现在的 CPU 都是构建在一块小小的硅半导体芯片上,这块芯片上包含数百万称为晶体 管的小电路开关,用于处理信息。 每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。这些脉冲用于控制和 同步各种操作的步调。时钟速度越快,在给定时间段内执行的指令就越多。时钟速度的计量 单位是赫兹(hertz, Hz),丨赫兹相当于每秒 1 个脉冲。20 世纪 90 年代计算机的时钟速度 通常是以兆赫( MHz) 来表示的( 1MHz 就是 100 万 Hz)。随着 CPU 的速度不断提高,目 前计算机的时钟速度通常以千兆赫(GHz) 来表述。Intel 公司最新处理器的运行速度大约是 3GHz。 最初被开发出来的 CPU 只有一个核(core)。核是处理器中实现指令读取和执行的部分