Java程序设计大学教程 第6章图形用户界面 6.lGUI编程基础 61.1图形用户界面 61.2 Swing和ATW 61.3窗体容器 62图形与绘图 621坐标系统 622颜色 623绘图 6.3事件处理模型 63.1事件和Java事件模型 632事件处理实例分析 633内部类 14 634常用组件的事件 215 64使用Sig组件 64.lMVC模型 642布局管理 643 Swing组件编程 65本章习题 第7章程序设计案例分析 7.1可视化程序设计与 NetBeans De 7.2设计窗体 236 721创建主窗体和主面板 236 722组件与布局设计 723添加事件 7.3设计菜单和对话框 731设计菜单 249 732设计对话框 4设计算法 7.5完成和部署应用程序字 7.6本章习题 第8章APLE与WEB编程 8. I Java applet基础 81.1什么是 applet 8.1.2编写 applet程序 81.3 applet的生命周期 8.2 applet在Wb中的应用 82.1HIML与Web编程 822 applet Web编程技巧 823 applet的安全机制 8.3把Jna应用程序转换为 applet 83.1转换方法 832转换示例 本章习题 292
Java 程序设计大学教程 第 6 章 图形用户界面 .................................................................................................................192 6.1 GUI 编程基础.................................................................................................................192 6.1.1 图形用户界面............................................................................................................................ 192 6.1.2 Swing 和 ATW........................................................................................................................... 195 6.1.3 窗体容器.................................................................................................................................... 196 6.2 图形与绘图.....................................................................................................................202 6.2.1 坐标系统.................................................................................................................................... 202 6.2.2 颜色............................................................................................................................................ 203 6.2.3 绘图............................................................................................................................................ 204 6.3 事件处理模型 .................................................................................................................208 6.3.1 事件和 Java 事件模型............................................................................................................... 208 6.3.2 事件处理实例分析.................................................................................................................... 209 6.3.3 内部类........................................................................................................................................ 214 6.3.4 常用组件的事件........................................................................................................................ 215 6.4 使用 Swing 组件 .............................................................................................................217 6.4.1 MVC 模型.................................................................................................................................. 217 6.4.2 布局管理.................................................................................................................................... 221 6.4.3 Swing 组件编程......................................................................................................................... 223 6.5 本章习题.........................................................................................................................229 第 7 章 程序设计案例分析 .........................................................................................................234 7.1 可视化程序设计与 NetBeans IDE .................................................................................235 7.2 设计窗体.........................................................................................................................236 7.2.1 创建主窗体和主面板................................................................................................................ 236 7.2.2 组件与布局设计........................................................................................................................ 239 7.2.3 添加事件.................................................................................................................................... 246 7.3 设计菜单和对话框 .........................................................................................................249 7.3.1 设计菜单.................................................................................................................................... 249 7.3.2 设计对话框................................................................................................................................ 254 7.4 设计算法.........................................................................................................................262 7.5 完成和部署应用程序 .....................................................................................................267 7.6 本章习题.........................................................................................................................273 第 8 章 APPLET 与 WEB 编程...................................................................................................278 8.1 Java applet 基础..............................................................................................................278 8.1.1 什么是 applet............................................................................................................................. 278 8.1.2 编写 applet 程序........................................................................................................................ 279 8.1.3 applet 的生命周期..................................................................................................................... 281 8.2 applet 在 Web 中的应用..................................................................................................282 8.2.1 HTML 与 Web 编程 .................................................................................................................. 283 8.2.2 applet Web 编程技巧................................................................................................................. 284 8.2.3 applet 的安全机制..................................................................................................................... 287 8.3 把 Java 应用程序转换为 applet.....................................................................................288 8.3.1 转换方法.................................................................................................................................... 288 8.3.2 转换示例.................................................................................................................................... 288 8.4 本章习题.........................................................................................................................292
Java程序设计大学教程 第9章开发过程与程序质量保证 9.l软件开发过程概述 91.1软件生命周期 9g9 91.2软件开发过程 9.3软件质量与测试 9.2程序调试 921程序调试的概念 23 使用断点 307 监视和检查数据的值 924调试过程 310 9.3单元测试 931单元测试与 JUnit 932在 NetBeans IDE中使用单元测试 312 933单元测试的应用举例 94异常与异常处理 317 941异常与异常类 942异常处理机制 943利用异常处理编程…… 322 9.5本章习题 328 第10章线程、文件与串行化 10.1多线程程序设计 333 10.1.1多任务、进程和线程 10.12Java线程模型 10.13设计多线程的应用程序 10.2流和文件 1021基本概念 1022基于文本文件的应用 348 1023IO流与文件 10.3对象申行化 10.3.1串行化的目的 10.32串行化的方法 358 10.4本章习题 参考文献
Java 程序设计大学教程 第 9 章 开发过程与程序质量保证 .............................................................................................297 9.1 软件开发过程概述 .........................................................................................................297 9.1.1 软件生命周期............................................................................................................................ 297 9.1.2 软件开发过程............................................................................................................................ 299 9.1.3 软件质量与测试........................................................................................................................ 302 9.2 程序调试.........................................................................................................................305 9.2.1 程序调试的概念........................................................................................................................ 305 9.2.2 使用断点.................................................................................................................................... 307 9.2.3 监视和检查数据的值................................................................................................................ 309 9.2.4 调试过程.................................................................................................................................... 310 9.3 单元测试......................................................................................................................... 311 9.3.1 单元测试与 JUnit ...................................................................................................................... 311 9.3.2 在 NetBeans IDE 中使用单元测试........................................................................................... 312 9.3.3 单元测试的应用举例................................................................................................................ 313 9.4 异常与异常处理 .............................................................................................................317 9.4.1 异常与异常类............................................................................................................................ 317 9.4.2 异常处理机制............................................................................................................................ 321 9.4.3 利用异常处理编程.................................................................................................................... 325 9.5 本章习题.........................................................................................................................328 第 10 章 线程、文件与串行化.................................................................................................333 10.1 多线程程序设计 .............................................................................................................333 10.1.1 多任务、进程和线程 ........................................................................................................... 333 10.1.2 Java 线程模型....................................................................................................................... 334 10.1.3 设计多线程的应用程序 ....................................................................................................... 342 10.2 流和文件.........................................................................................................................346 10.2.1 基本概念............................................................................................................................... 347 10.2.2 基于文本文件的应用 ........................................................................................................... 348 10.2.3 I/O 流与文件......................................................................................................................... 353 10.3 对象串行化.....................................................................................................................357 10.3.1 串行化的目的 ....................................................................................................................... 357 10.3.2 串行化的方法 ....................................................................................................................... 358 10.4 本章习题.........................................................................................................................363 参考文献..........................................................................................................................................367
Java程序设计大学教程 第1章绪论 计算机程序设计对于很多初学者来说,充满了神秘的诱惑。本章通过介绍计算机程序设 计和程序设计语言的基础知识,揭开了程序设计神秘的面纱。帮助读者搞清什么是计算机程 序、程序设计和程序设计语言等基本概念。 Java作为我们要学习的程序设计语言,是本章要介绍的重点。我们会沿着Java的发展 历史,探索这门应用广泛的计算机语言,并讨论Java是什么,又不是什么。 本章我们还要介绍如何下载JDK搭建Java平台,如何编写、编译和运行Java程序,如 何使用Java程序的开发工具。总之,通过本章的学习,我们将为开始Java程序设计的探索 之旅做好最充分的准备 什么是程序设计 程序是指按照时间顺序依次安排的工作步骤。而程序设计则是对这些步骤的编排和优 化。程序设计有着比计算机更长的历史,只不过计算机的出现使得程序设计有了更专用的领 域——计算机程序设计,并得到空前的发展。计算机程序设计又称为编程( programming), 是一门设计和编写计算机程序的科学和艺术。 11.1 程序与计算机 人们用程序的形式存储一系列指令已经有几个世纪了。18世纪的音乐盒和19世纪末与 0世纪初的自动钢琴,就可以播放音乐程序。这些程序以一系列金属针或纸孔的形式存储, 每一行(针或孔)表示何时演奏一个音符,而针或孔则表明此时演奏什么音符。19世纪初, 随着法国发明家约瑟夫一玛丽雅卡尔的由穿孔卡片控制的编织机的发明,人们对物理设备 的控制变得更加精巧。在编织特定图案的过程中,编织机的各个部分得进行机械定位。为了 使这个过程自动化,雅卡尔使用一张纸质卡片代表织机的一个定位,用卡片上的孔来指示该 执行织机的哪个操作。整条花毯的编织可被编码到一叠这样的卡片上,同样的一叠卡片每次 使用都会编出相同的花毯图案。在这种可编程的编织机使用中,有的复杂程序需要由24,000 多张卡片构成。 世界上第一台可编程的机器是由英国数学家和发明家查尔斯→巴比奇设计的,但从未完 全制造成。这台叫做分析机的机器,使用和雅卡尔的织机类似的穿孔卡片来选择每个步骤应 执行的具体算术运算。插入不同的卡片组,就会改变机器执行的运算。这种机器几乎能在现 代计算机中找到类似的对应物,只不过它是机械化的,而非电气化的。分析机的制造从未完 成,是因为制造它所需要的技术当时不存在 供分析机使用的最早卡片组程序是由诗人拜伦勋爵的女儿——一英国数学家奥古斯塔·埃 达·拜伦开发的。由于这个原因,她被认为世界上第一位程序员 现代的内部存储计算机程序的概念是由美籍匈牙利数学家约翰·冯诺伊曼于1945年首 先提出来的。冯诺伊曼的想法是使用计算机的存储器来既存储数据又存储程序。这样,程 序可被视作数据,可像数据一样被其他程序处理。这一想法极大地简化了计算机中的程序存 储与执行的任务。 计算机程序是指导计算机执行某个功能或功能组合的一套指令。要使指令得到执行,计
Java 程序设计大学教程 1 第1章 绪论 计算机程序设计对于很多初学者来说,充满了神秘的诱惑。本章通过介绍计算机程序设 计和程序设计语言的基础知识,揭开了程序设计神秘的面纱。帮助读者搞清什么是计算机程 序、程序设计和程序设计语言等基本概念。 Java 作为我们要学习的程序设计语言,是本章要介绍的重点。我们会沿着 Java 的发展 历史,探索这门应用广泛的计算机语言,并讨论 Java 是什么,又不是什么。 本章我们还要介绍如何下载 JDK 搭建 Java 平台,如何编写、编译和运行 Java 程序,如 何使用 Java 程序的开发工具。总之,通过本章的学习,我们将为开始 Java 程序设计的探索 之旅做好最充分的准备。 1.1 什么是程序设计 程序是指按照时间顺序依次安排的工作步骤。而程序设计则是对这些步骤的编排和优 化。程序设计有着比计算机更长的历史,只不过计算机的出现使得程序设计有了更专用的领 域——计算机程序设计,并得到空前的发展。计算机程序设计又称为编程(programming), 是一门设计和编写计算机程序的科学和艺术。 1.1.1 程序与计算机 人们用程序的形式存储一系列指令已经有几个世纪了。18 世纪的音乐盒和 19 世纪末与 20 世纪初的自动钢琴,就可以播放音乐程序。这些程序以一系列金属针或纸孔的形式存储, 每一行(针或孔)表示何时演奏一个音符,而针或孔则表明此时演奏什么音符。19 世纪初, 随着法国发明家约瑟夫—玛丽•雅卡尔的由穿孔卡片控制的编织机的发明,人们对物理设备 的控制变得更加精巧。在编织特定图案的过程中,编织机的各个部分得进行机械定位。为了 使这个过程自动化,雅卡尔使用一张纸质卡片代表织机的一个定位,用卡片上的孔来指示该 执行织机的哪个操作。整条花毯的编织可被编码到一叠这样的卡片上,同样的一叠卡片每次 使用都会编出相同的花毯图案。在这种可编程的编织机使用中,有的复杂程序需要由 24,000 多张卡片构成。 世界上第一台可编程的机器是由英国数学家和发明家查尔斯•巴比奇设计的,但从未完 全制造成。这台叫做分析机的机器,使用和雅卡尔的织机类似的穿孔卡片来选择每个步骤应 执行的具体算术运算。插入不同的卡片组,就会改变机器执行的运算。这种机器几乎能在现 代计算机中找到类似的对应物,只不过它是机械化的,而非电气化的。分析机的制造从未完 成,是因为制造它所需要的技术当时不存在。 供分析机使用的最早卡片组程序是由诗人拜伦勋爵的女儿——英国数学家奥古斯塔•埃 达•拜伦开发的。由于这个原因,她被认为世界上第一位程序员。 现代的内部存储计算机程序的概念是由美籍匈牙利数学家约翰•冯•诺伊曼于 1945 年首 先提出来的。冯•诺伊曼的想法是使用计算机的存储器来既存储数据又存储程序。这样,程 序可被视作数据,可像数据一样被其他程序处理。这一想法极大地简化了计算机中的程序存 储与执行的任务。 计算机程序是指导计算机执行某个功能或功能组合的一套指令。要使指令得到执行,计
Java程序设计大学教程 算机必须执行程序,也就是说,计算机要读取程序,然后按准确的顺序实施程序中编码的步 骤,直至程序结束。一个程序可多次执行,而且每次用户输给计算机的选项和数据不同,就 有可能得到不同的结果 现代计算机都是基于冯·诺伊曼模型结构的,此模型着眼于计算机的内部结构,定义了 处理机的运行过程。该模型把计算机分为四个子系统:存储器、算术/逻辑单元、控制单元 和输入/输出单元 ·存储器存储器是用来存储的区域,计算机在处理过程中存储器用来存储数据和程 序,我们会在后面讨论存储数据和程序的话题 算术/逻辑单元算术/逻辑单元是用来进行计算和逻辑操作的地方。如果是一台数 字处理用的计算机,它应该能够进行数字运算,(例如进行一系列的数字相加运算)。 当然它也应该可以对数据进行一系列逻辑操作。(例如,找出两个数字中的小的 个)。 ·控制单元控制单元是用来对存储器、算术/逻辑单元、输入输出等子系统进行控 制操作的单元。 ·输入输出单元输入子系统负责从计算机外部接受输入数据和程序:输出子系统 负责将计算机的处理结果输出到计算机外部。输入/输出子系统的定义相当广泛 它们还包含辅助存储设备,例如,用来存储处理所需的程序和数据的磁盘和磁带等 当一个磁盘用于存储处理后的输出结果,我们一般就可以认为它是输出设备,如果 你是从该磁盘上读取数据,该磁盘就被认为是输入设备。 如果不关心计算机的内部物理结构,我们可以简单的认为计算机是一个黑盒。但是,仍 然需要通过定义计算机所完成的工作来区别其和其他黑盒之间的差异。这里我们提供两种常 见的计算机模型。 一种是数据处理器 可以认为计算机是一个数据处理器。依照这种定义,计算机就可以认为是一个接受输入 数据,处理数据,产生输出数据的黑盒(如图1-1所示)。尽管这个模型能够体现现代计算 机的功能,但是它的定义还是太狭窄。按照这种定义,便携式计算器也可以认为是计算机(按 照字面意思,它也符合定义的模型)。 输入数据 输出数据 计算机 图1-1数据处理模型 另一个问题是这个模型并没有说明它处理的类型以及是否可以处理一种以上的类型。换 句话说,它并没有清楚的说明一个基于这个模型的机器能够完成操作的类型和数量。它是专 用机器还是通用机器呢? 这种模型可以表示为一种设计用来完成特定任务的专用计算机(或者处理器),比如用 来控制建筑物温度或汽车油料使用。尽管如此,计算机作为一个当今使用的术语,是一种通 用的机器。它可以完成各种不同的工作。这表明我们需要改变我们对计算机定义的模型来反 映当今计算机的现实。 2
Java 程序设计大学教程 2 算机必须执行程序,也就是说,计算机要读取程序,然后按准确的顺序实施程序中编码的步 骤,直至程序结束。一个程序可多次执行,而且每次用户输给计算机的选项和数据不同,就 有可能得到不同的结果。 现代计算机都是基于冯·诺伊曼模型结构的,此模型着眼于计算机的内部结构,定义了 处理机的运行过程。该模型把计算机分为四个子系统:存储器、算术/逻辑单元、控制单元 和输入/输出单元: • 存储器 存储器是用来存储的区域,计算机在处理过程中存储器用来存储数据和程 序,我们会在后面讨论存储数据和程序的话题。 • 算术/逻辑单元 算术/逻辑单元是用来进行计算和逻辑操作的地方。如果是一台数 字处理用的计算机,它应该能够进行数字运算,(例如进行一系列的数字相加运算)。 当然它也应该可以对数据进行一系列逻辑操作。(例如,找出两个数字中的小的一 个)。 • 控制单元 控制单元是用来对存储器、算术/逻辑单元、输入输出等子系统进行控 制操作的单元。 • 输入/输出单元 输入子系统负责从计算机外部接受输入数据和程序;输出子系统 负责将计算机的处理结果输出到计算机外部。输入/输出子系统的定义相当广泛, 它们还包含辅助存储设备,例如,用来存储处理所需的程序和数据的磁盘和磁带等。 当一个磁盘用于存储处理后的输出结果,我们一般就可以认为它是输出设备,如果 你是从该磁盘上读取数据,该磁盘就被认为是输入设备。 如果不关心计算机的内部物理结构,我们可以简单的认为计算机是一个黑盒。但是,仍 然需要通过定义计算机所完成的工作来区别其和其他黑盒之间的差异。这里我们提供两种常 见的计算机模型。 一种是数据处理器。 可以认为计算机是一个数据处理器。依照这种定义,计算机就可以认为是一个接受输入 数据,处理数据,产生输出数据的黑盒(如图 1-1 所示)。尽管这个模型能够体现现代计算 机的功能,但是它的定义还是太狭窄。按照这种定义,便携式计算器也可以认为是计算机(按 照字面意思,它也符合定义的模型)。 计算机 图 1-1 数据处理模型 另一个问题是这个模型并没有说明它处理的类型以及是否可以处理一种以上的类型。换 句话说,它并没有清楚的说明一个基于这个模型的机器能够完成操作的类型和数量。它是专 用机器还是通用机器呢? 这种模型可以表示为一种设计用来完成特定任务的专用计算机(或者处理器),比如用 来控制建筑物温度或汽车油料使用。尽管如此,计算机作为一个当今使用的术语,是一种通 用的机器。它可以完成各种不同的工作。这表明我们需要改变我们对计算机定义的模型来反 映当今计算机的现实。 输入数据 输出数据
Java程序设计大学教程 另一种是可编程数据处理器 一个相对较好的适用于具有通用性的计算的模型如图1-2所示。图中添加了一个额外 的元素—程序到计算机内部。程序是用来告诉计算机对数据进行处理的指令集合。在早期 的计算机中,这些指令是通过对配线的改变或一系列开关的打开闭合来实现的。今天,应用 程序则是计算机语言所编写的一系列指令的集合。 程序 输入数据 输出数据 计算机 图1-2可编程数据处理器模型 在这个新模型中,输出数据依赖两方面因素的结合作用:输入数据和程序。对于相同的 数据输入,如果改变程序,则可能产生不同的输出。类似的,对于同样的程序,如果你改变 输入内容,其输出结果也将不同。最后,如果输入数据和程序保持不变,输岀结果也不变。 冯·诺伊曼模型的主要特征在于其存储程序的概念。尽管早期的计算机没有使用这种模 型,但它们还是使用了程序的概念。编程在早期的计算机中体现为对一系列开关的开闭合和 配线的改变。编程是在数据实际开始处理之前由操作员和工程师完成的一项工作。 冯·诺伊曼模型改变了“程序”的含义。在这种模型中,程序有了两个方面的含义 首先,程序必须是存储的。在冯·诺伊曼模型中这些程序被存储在计算机的内存中,内 存中不仅仅需要存储数据,还要存储程序(参见图1-3) 程序 数据 存储器 图1-3内存中的程序和数据 其次,模型中还要求程序必须是有序的指令集。每一条指令操作一个或者多个数据项。 因此,一条指令可以改变它前面指令的作用。例如,示例程序1-1演示了输入a、b两个整 数,将它们相加后显示出结果的程序。这段程序包含了5条指令代码。 示例程序1-1由多条指令组成的程序 1: write('请输a,b两个整数: readin(a)
Java 程序设计大学教程 3 另一种是可编程数据处理器。 一个相对较好的适用于具有通用性的计算的模型如图 1-2 所示。图中添加了一个额外 的元素——程序到计算机内部。程序是用来告诉计算机对数据进行处理的指令集合。在早期 的计算机中,这些指令是通过对配线的改变或一系列开关的打开闭合来实现的。今天,应用 程序则是计算机语言所编写的一系列指令的集合。 计算机 图 1-2 可编程数据处理器模型 在这个新模型中,输出数据依赖两方面因素的结合作用:输入数据和程序。对于相同的 数据输入,如果改变程序,则可能产生不同的输出。类似的,对于同样的程序,如果你改变 输入内容,其输出结果也将不同。最后,如果输入数据和程序保持不变,输出结果也不变。 冯·诺伊曼模型的主要特征在于其存储程序的概念。尽管早期的计算机没有使用这种模 型,但它们还是使用了程序的概念。编程在早期的计算机中体现为对一系列开关的开闭合和 配线的改变。编程是在数据实际开始处理之前由操作员和工程师完成的一项工作。 冯·诺伊曼模型改变了“程序”的含义。在这种模型中,程序有了两个方面的含义。 首先,程序必须是存储的。在冯·诺伊曼模型中这些程序被存储在计算机的内存中,内 存中不仅仅需要存储数据,还要存储程序(参见图 1-3)。 存储器 图 1-3 内存中的程序和数据 其次,模型中还要求程序必须是有序的指令集。每一条指令操作一个或者多个数据项。 因此,一条指令可以改变它前面指令的作用。例如,示例程序 1-1 演示了输入 a、b 两个整 数,将它们相加后显示出结果的程序。这段程序包含了 5 条指令代码。 示例程序 1-1 由多条指令组成的程序 1: write('请输 a,b 两个整数: '); 2: readln(a); 3: readln(b); 程序 数据 程序 输入数据 输出数据