面向对象的程序设计-Java张白一第三版第14章
Java程序设计 张永强 张墨华 第14章习题答案

第 14 章 网络编程请分析对比 TCP 协议与 UDP 协议的特点,以及它们通讯流程的区别。
参考 14.1.2 2. 解释在基于 TCP 的网络编程时 ServerSocket 和 Socket 的作用。
ServerSocket 实现了服务器套结字,它的实例需要注册到主机系统,并提供面向客户 端的请求侦听服务。
而 Socket 实现客户端套接字,基于 TCP 网络编程时的网络客户端可以 利用一个 Socket 实例和服务器端的 Socket 实例进行通信。
3. 解释在基于 UDP 的网络编程时 DatagramSocket 和 DatagramPacket 的作用。
DatagramSocket 表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务 的发送或接收点。
DatagramPacket 数据报包用来实现无连接包投递服务。
4. 如果要捕捉端口重复使用的异常,应该使用哪个异常类? BindException 用来将套接字绑定到本地地址和端口时发生错误的情况下,抛出此异 常。
5. 对于对象的传输,在编程的时候要注意哪些问题?传输基础对象和非基础对象时,程 序编写有什么不同? 一个对象能否传输取决于该对象是否能够被串行化。
对于 JDK 提供的如 Integer、 String、Date 等类型的对象,由于已经被串行化,因此可以被直接传输,而使用用户自定 义的类,如果需要进行串行化传输,则该类要实现 Serializable 接口,并且保证该类的每 个要传输的属性其类型必须也是可串行化。
同时,由于 Socket 的通信是建立在双方的同步基础之上的,因此在进行非基础对象的传输 时,需要保证通信两端构造流的顺序必须按照相反的顺序构造。
6. 程序 14-6 给出了客户端的对象传输程序,请给出服务器端的改造程序,并调试运行。
1.package chap14.session4; public class Account { private String id; // 用户唯一的 id private String name;// 用户名称 private int balance;// 当前余额 public Account(String id, String name, int balance) { super(); this.id = id; = name;this.balance = balance; } public Account(String id, String name) { super(); this.id = id; = name; this.balance = 0; } // 这里省略了每个属性的 getter 和 setter 方法,请创建时自行添加。
《Java面向对象程序设计》(耿祥义张跃著) 课后答案下载 (细选2篇)

《Java面向对象程序设计》(耿祥义张跃*著) 课后答案下载(细选2篇)《Java面向对象程序设计》(耿祥义张跃著) 课后答案下载11.James Gosling2.(1)使用一个文本编辑器编写源文件。
(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。
(3)使用Java解释器(java.exe)运行Java程序3.Java的源文件是由若干个书写形式互相的类组成的。
应用程序中可以没有public类,若有的话至多可以有一个public类。
4.系统环境path D\jdk\bin;系统环境classpath D\jdk\jre\lib\rt.jar;.;5. B6. Java源文件的扩展名是.java。
Java字节码的扩展名是.class。
7. D8.(1)Speak.java(2)生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class(3)java Xiti8(4)执行java Speak的错误提示Exception in thread "main" ng.NoSuchMethodError:main执行java xiti8得到的错误提示Exception in thread "main" ng.NoClassDefFoundError: xiti8 (wrong name: Xiti8)执行java Xiti8.class得到的错误提示Exception in thread "main" ng.NoClassDefFoundError: Xiti8/class执行java Xiti8得到的输出结果I'm glad to meet you9.属于操作题,解答略。
习题21. D2.【代码1】【代码2】错误 //【代码3】更正为 float z=6.89F;3.float型常量后面必须要有后缀“f”或“F”。
面向对象的程序设计-Java张白一第三版第13章

状态。
第13章 多线程
4.阻塞状态
一个正在执行的线程在某些特殊情况下,如执行了 suspend、join或sleep方法,或等待I/O设备的使用权,那么 它将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞 时它不能进入就绪队列,只有当引起阻塞的原因被消除时, 线程才可以转入就绪状态,重新进到线程队列中排队等待 CPU资源,以便从原终止处开始继续运行。 5.死亡状态 处于死亡状态的线程将永远不再执行。线程死亡有两个 原因:一是正常运行的线程完成了它的全部工作;二是线程 被提前强制性地终止了。例如,通过执行stop或destroy方法
第13章 多线程
表13 造 方 法 Thread( ) Thread(Runnable target) Thread(ThreadGroup group,Runnable target) Thread(String name) Thread(ThreadGroup name) group,String 说 明 构造一个新线程,用此方式创建的线程必须覆盖 run( )方法 构造一个新线程,使用指定对象 target 的 run( )方法 在指定的线程组 group 中构造一个新的线程,使用指定对象 target 的 run( )方法 用指定字符串名 name 构造一个新线程 在指定的线程组 group 中用指定字符串名 name 构造一个新线程
Thread(Runnable target,String name)
用指定字符串名 name 构造一个新线程,使用指定对象 target 的 run( )方法 在指定的线程组 group 中使用字符串名 name 构造一个新线程, 并使用指定对象 target 的 run( )方法
Thread(ThreadGroup group,Runnable target,String name)
面向对象程序设计(JAVA)课件

String类提供了比较两个字符串的方法,如 equals()和compareTo()。
3
字符串转换
String类还提供了将其他数据类型转换为字符串 的方法,如Integer.toString()和 Double.toString()。
ArrayList类
动态数组
ArrayList类是一个动态数组,可以根据需要自动增长 和缩小。
Java的主要特性
面向对象
平台无关
自动内存管理
多线程支持
Java是一种纯粹的面向对象 编程语言,支持类和对象的 概念,以及继承、多态等面
向对象特性。
Java通过字节码实现跨平台 运行,只要安装了Java运行 时环境(JRE)或Java开发工 具包(JDK),就可以在任何 支持Java的平台上运行Java
01
常用方法
HashMap类提供了用于插入、删除和 查找键值对的方法,如put()、remove() 和get()。
02
03
遍历与清空
HashMap类还提供了用于遍历和清空 容器的方法,如iterator()和clear()。
Date类
日期时间表示
Date类用于表示特定的 时间点,包括年、月、 日、时、分、秒等信息。
异常的处理方式
01
抛出异常
当程序出现异常时,会抛出异常对象,传递给调用者。
02
捕获异常
在代码中通过try-catch语句块来捕获和处理异常。当try块中的代码出
现异常时,控制流会立即跳转到相应的catch块中执行处理逻辑。
03
声明抛出异常ຫໍສະໝຸດ 在方法签名中通过throws关键字声明该方法可能会抛出的异常,要求
精品文档-面向对象程序设计—Java(第三版)(张白一)-第6章

low=mid+1;
//要找的数可能在
数组的后半部分中 else high=mid-1;
数组的前半部分中 mid=(low+high)/2;
} if(low>high) mid=-1;
//要找的数可能在
return mid; 则表示不存在要查的元素
} }
// mid是数组元素下标,若为 -1,
第6章 数组
第6章 数组
图6.3 a1数组的初始化
第6章 数组
2.用关键字new创建数组对象 用关键字new创建数组对象,并按照Java提供的数据成员 默认初始化原则(见第4章)对数组元素赋初值。用关键字new 来创建数组对象有两种方式。 (1) 先声明数组,再创建数组对象。这实际上由两条语 句构成,格式如下: 类型标识符 数组名[ ]; 数组名=new 类型标识符[数组长度];
第6章 数组
1.直接指定初值的方式创建数组对象 用直接指定初值的方式创建数组对象是在声明一个数组的 同时创建数组对象。具体做法是将数组元素的初值依次写入赋 值号后的一对花括号内,各个元素值间用逗号分隔,给这个数 组的所有元素赋上初始值;初始值的个数也就确定了数组的长 度。例如:
int[ ] a1={23,–9,38,8,65};
度]; 例如: int[ ] a=new int[10];
第6章 数组
6.1.3 一维数组的引用 当数组经过初始化后,就可通过数组名与下标来引用数组 中的每一个元素。一维数组元素的引用格式如下:
数组名[数组下标] 其中,数组名是与数组对象关联的引用变量;数组下标是指元 素在数组中的位置,数组下标的取值范围是0~(数组长度– 1),下标值可以是整数型常量或整数型变量表达式。例如,在 有了“int[ ] a=new int[10];”声明语句后,下面的两条赋 值语句是合法的:
精品文档-面向对象程序设计—Java(第三版)(张白一)-第11章

第11章 高级组件GUI设计
public void keyReleased(KeyEvent e){ //响应释放键事件所需要的业务逻辑
} } 用户可在对应的方法体中写入处理对应事件的程序代码, 在方法体中可以引用java.awt.Event.KeyEvent类中提供的方 法获取引发事件的信息。
第11章 高级组件GUI设计
第11章 高级组件GUI设计
(1) 将响应键盘事件所需要的业务逻辑封装在实现监听 器接口的类中:
Class KeyEventDemo implements KeyAdapter // 其中的方法可根据情况选择
{ public void keyTyped(KeyEvent e) { //响应键被敲击事件所需要的业务逻辑 } public void keyPressed(KeyEvent e) { //响应按下键事件所需要的业务逻辑 }
boolean isActionKey( )
返回此事件中的键是否为“动作”键
String paramString( )
返回标识此事件的参数字符串
void setKeyChar(char keyChar)
设置 keyCode 值,以表示某个逻辑字符
void setKeyCode(int keyCode)
MouseWheelListener MouseMotionListener WindowFocusListener, WindowListener,
WindowStateListener
第11章 高级组件GUI设计
11.2 KeyEvent事件及其响应 表10.4、表10.5和表10.6已经列出了KeyEvent事件类与 事件源和事件监听器之间的关系。如果希望在所设计的用户界 面上利用文本框输入文字激发一个键盘事件,利用Java的委 托事件模型处理这个事件,就需要知道KeyEvent事件及其响 应原理。
面向对象的程序设计

第六章面向对象的程序设计6.1 面向对象程序设计概述1. 基本概念面向对象的程序设计是经过对类、子类和对象等的设计来体现的类是面向对象程序设计技术的核心。
类: 定义了对象特征以及对象外观和行为的模板。
类的特征:封装性: 隐藏了类中对象的内部数据或操作细节, 只看到外表信继承性:任何类都能够从其它已有的类中派生, 新类保持了父类中的行为和属性, 但增加了新的功能。
体现了面向对象设计方法的共享机制。
多态性: 相同的操作可作用于多种类型的对象上, 并获得不同的抽象性: 提取一个类或对象与众不同的特征, 而不对该类或对象的所有信息进行处理。
基类:系统本身提供的类称为基类。
基类包括容器类和控件类。
容器类是其它对象的集合, 如表格、选项按钮组; 控件类是单一的对象, 不包含其它对象, 如命令按钮、文本框。
子类:以其它类定义为起点, 对某一对象所建立的新类。
新类将继承任何对父类所做的修改。
类库:存储类的文件, 每一个以可视方式设计的类都存储在一个类库中。
类库文件的扩展名为.VCX 。
对象: 是类的一个实例, 包括了数据和过程。
具有所在类所定义的全部属性和方法。
VFP有两种对象:容器对象和控件对象。
属性: 控件、字段或数据库对象的特性。
事件:由对象识别的一个动作。
方法:与对象相联系的由程序执行的一个处理过程, 即处理事件的一组代码用户不能够为对象创立新的事件, 但能够创立新的方法程序。
2. Visual FoxPro 基类从下述Visual FoxPro 基类中, 能够派生子类或创立对象。
容器命令组控件微调标签表单命令按钮复选框OLE 容器控制线条表单集选项组列表框OLE 绑定型控制分隔符#表格选项按钮#文本框自定义形状标头#页框组合框工具栏图象列#页面#编辑框计时器注: # 这些类是父容器的集成部分, 在类设计器中不能子类化基类事件的最小集合事件说明Init 当对象创立时激活。
Destroy 当对象从内存中释放时激活。
面向对象程序设计

5.1.1
类定义
对一个用户自定义的类,要为类取一个名字,并指 明类中包含哪些变量和方法以及相应的类型、实现 等,这称为类的定义。类定义语句的一般形式为:
[修饰符]class 类名 [extends 父类名] [implements 接口名表] { 成员变量声明 // 类体 方法成员声明 }
(1)构造方法名与类名相同。
(2)构造方法不返回任何值,也没有返回类型。 (3)每一个类可以有零个或多个构造方法。 (4)构造方法在创建对象时自动执行,一般不能显式地直接 调用。
【例5.6】分别计算长、宽分别为20、10和6、 3的 两个长方形面积。本程序用构造方法来初始化长方 形的大小。
对象名.数据成员名 对象名.成员方法名() // 方法名带圆括号
运算符“.”在这里称为成员运算符,在对象名和成 员名)之间起到连接的作用,指明是哪个对象的哪个 成员。 例如:设已经定义了例5.2中的Rectangle类,可以 用如下的方法来引用对象的成员:
Rectangle r = new Rectangle(); // 定义类的对象 r.length,r.width // 引用对象的数据成员 r.area() // 引用对象的成员方法
final double PI = 3.1416; final double G = 9.18;
因为final变量不能改变,没有必要在每个对象中进 行存储,可以将final变量声明为静态的,以节省存 储空间。
例如: static final double PI = 3.1416;
Java面向对象程序设计一

4.2 类
2 用户程序自定义类 程序员把注意力放在创建称为类的用户自定义类型( )上,类也称为程序员定义的类型 ( ),每个类都含有数据和一组操作数据的方法,类中的数据部分称为实例变量。用户定 义类型(即类)的实例称为对象。 下面是一个简单化的类,在编写今后的职工工资系统时,会用到它。
数据
客观世界的 对象和操作
问题空间 客观世界的算法
程序员对问题的表达(抽象)
程序设计的 对象和操作
计算机算法 解空间
结果 客观世界的
对象
输出数据
4.1 面对对象的基本概念
2.如何用面向对象的方法实现抽象 一个抽象数据类型( ,) 可以分解成4个部分,如图4-2所示。语法和语义构成 抽象数据类型的说明,让使用者了解这个抽象数 据类型的特征。属性和方法构成的实现,展示这 个是怎样做成的
类的修饰符用来说明类的特 殊性质。
分为三种: 访问控制符: 公共类, 抽象类说明符: 最终类说明符:f
接口名跟在关键字后面,用来说 明当前类中实现了哪个接口定义的功 能和方法。
接口是语言用来实现多重继承的 一种特殊机制,我们将在后面详细介 绍它的使用方法。
4.2 类
关键字,在它的后面,应跟随新数据类型的 名称。(注意不要把写成)。 父类名跟在 关键字后面,用来说明当前类是 哪个已经存在类的子类,存在继承关系。继承 是类与类之间的一种非常重要的关系。
4.3 方法
方法头定义了方法的性质,方法体则定义了方法的具体内容。 方法体通常起到两种作用,一是围绕类的属性进行各种操作;二是与其他的类与对象进行
数据交流、消息传递等操作。 在一个方法中定义另一个方法将产生语法错误。 (1)最好避免局部变量“屏蔽”实例变量,在一个类中不使用同名标识符就可以做到这一 点;方法调用中参数用来传递数值、传递引用,同时方法还可以嵌套、递归调用。 (2)方法体中如果指定了非的返回值类型,方法中就必须包含一条语句保证任何情况下都 有返回数值,语句后面不能跟任何表达式;
JAVA第4章面向对象的程序设计

当需要使用类的服务时,不需要创建对象来提供服
务,而可以直接指示该类来提供服务,用下面的语
法来实现: Class . methods( );
例如,Java API 提供的Math类就有很多常用的数值
运算方法,参见课本P73表4-1所示。
说明:尽量去用一些现成且久经考验的工具去完成
一项工作是十分明智的,API就扮演了这样一个角色。
public double getResult( ) //取得计算结果
{ return base; }
}
4.2.1 类的定义
程序说明:
⑴例程4-1用关键字 public 和 class 来定义一个名字为 SimpleCalculator 的简单计算器类。
说明: 一个java源文件可以有三个顶层元素, 即: 一个包说明;任意多个引入语句;类和接口的说明。
4.2 对象和类
本节主要学习如何用Java语言将类和对象表达出来。 【类与对象之间的关系】
4.2.1 类的定义 4.2.2 对象实例的创建 4.2.3 封装、继承与多态 (1)封装 (2)继承 (3)方法的重定义和方法重载 (4)多态 (5)抽象类和最终类
2. 对象的概念
4.1.1 对象
问题空间:是需要用计算机去解决的问题,是问题 解决者对问题的认识,这些问题是存在于现实生活 中的。比如机场管理、个人信用卡关系、银行账户 管理。
解空间:所谓解空间就是对问题空间中有待解决的 问题进行建模的空间。这里讨论的解空间将以计算 机为载体,要做的工作就是如何将现实中将要解决 的问题抽象成计算机可理解并表示的单元,这个单 元即为所谓的对象。所以将现实抽象成对象是个很 重要的过程。
4.1.1 对象
2. 对象的概念 《Thinking in Java》一书中的作者Bruce Eckel
精品文档-面向对象程序设计—Java(第三版)(张白一)-第2章

第2章 Java语言基础
表2.4列出了Java语言所使用的数据类型。我们将在介绍 了常量、变量等基本概念之后,再结合实例对各种数据类型作 具体讲解。
第2章 J关键字
基 本 数类 据型 类 型
引 用 类 型
名称
整数类型
浮点类型 字符类型 布尔类型 字符串 数组 类 接口
break char double float implements long package short throw void
byte class else for import native private static throws volatile
byvalue * const* extends future inner new protected super transient while
第2章 Java语言基础
第2章 Java语言基础
2.1 Java符号集 2.2 数据类型、常量与变量 2.3 表达式和语句
第2章 Java语言基础
2.1 Java符号集 符号是构成语言和程序的基本单位。Java语言不采用通 常计算机语言系统所采用的ASCII代码集,而是采用更为国际 化的Unicode字符集。在这种字符集中,每个字符用两个字节 即16位表示。这样,整个字符集中共包含65 535个字符。其 中,前面256个字符表示ASCII码,使Java对ASCII码具有兼容 性;后面21 000个字符用来表示汉字等非拉丁字符。但是, Unicode只用在Java平台内部,当涉及打印、屏幕显示、键盘 输入等外部操作时,仍由计算机的具体操作系统决定其
在Java系统中,常量有两种形式:一种是以字面形式直接给 出值的常量;另一种则是以关键字final定义的标识符常量。 不论哪种形式的常量,它们一经建立,在程序的整个运行过程 中其值始终不会改变。按照由浅入深的学习规律,这里只讨论 以字面形式直接给出值的常量,至于以关键字final定义的标 识符常量,将在第4章讨论final修饰符时专门论述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第14章 输入与输出
字节流用于读/写字节类型的数据(包括ASCII表中的字 符)。字节流类可分为表示输入流的InputStream类及其子类, 表示输出流的OutputStream类及其子类。
字符流用于读/写Unicode字符。它包括表示输入流的 Reader类及其子类,表示输出流的Writer类及其子类。
说明 自输入流中读取数据的下一个字节 将输入的数据存放在指定的字节数组 b 中 自输入流中的 offset 位置开始读取 len 个字节到 byte 数组 将读取位置移至输入流标记处 从输入流中跳过 n 个字节 返回输入流中的可用字节个数 在输入流当前位置加上标记 测试输入流是否支持标记(mark) 关闭输入流,并释放占用的所有资源
String readUTF( )
DataInputStream(InputStream in)
读取 16 位短整型数 读取 16 位无符号短整型数 读一个 16 位字符 读一个 32 位整数数据 读一个 64 位长整数数据 读一个 32 位浮点数 读一个 64 位双字长浮点数 读一行字符
读 UTF(UnicodeTextFormat) 文本格式的字符串,返回 值即该字符串内容
第14章 输入与输出
java.io.FilterInputStream java.io.DataInputStream java.io.PushbackInputStream java.io.BufferedInputStream java.io.LineNumberInputStream
1.InputStream类的成员方法 表14.1列出了InputStream类的成员方法,其中最主要的 方法是read。
第14章 输入与输出 表14.1 InputStream类的成员方法
成员方法 abstract int read( ) int read(byte b[ ]) int read(byte b[ ],int offset,int len) void reset( ) long skip(long n) int available( ) void mark(int readlimit) boolean markSupported( ) void close( )
第14章 输入与输出 表14.2 DataInputStream类的成员方法
成员方法 int read(byte b[ ]) int read(byte b[ ], int offset,int len)
说明 从输入流中将数据读取到数组 b 中
从输入流中读取 len 个字节的数据到数组 b 中,在数组 中从 offset 位置开始存放
第14章 输入与输出
第14章 输入与输出
14.1 基本输入/输出流类 14.2 文件的输入/输出
第14章 输入与输出
14.1 基本输入/输出流类
流是数据的有序序列,它既可以是未加工的原始二进 制数据,也可以是经过一定编码处理后的符合某种规定格式 的特定数据,如字节流序列、字符流序列等。数据的性质、 格式不同,则对流的处理方法也不同。因此,Java的输入/ 输出类库中有不同的流类来对应不同性质的输入/输出流。 在java.io包中,基本输入/输出流类可按读/写数据的不同类 型分为两种:字节流和字符流。
读操作跳过 n 个字节,返回真正跳过的字节数 读一个布尔值 读一个字节 读取一个 8 位无符号数
第14章 输入与输出
short readShort( ) int readUnsignedShort( ) char readChar( ) int readInt( ) Long readLong( ) float readFloat( ) Double readDouble( ) String readLine( )
下面我们将针对这四个类及其派生子类做进一步的介绍。
第14章 输入与输出
14.1.1 InputStream类 InputStream类是用于读取字节型数据的输入流类,该类
的继承及派生结构如下:
ng.Object java.io.InputStream java.io.FileInputStream java.io.PipedInputStream java.io.ObjectInputStream java.io.SequenceInputStream java.io.ByteArrayInputStream java.io.StringBufferInputStream
在一个已经存在的输入流基础上构造一个过滤流 DataInputSt例程序C14_1.java】 键盘输入数据的读取。
import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; public class C14_1 {
void readFully(byte b[ ])
读取输入流中的所有数据到数组 b 中
void readFully(byte b[ ],int offset,int len)
读取输入流中的所有数据到数组 b 中,在数组 b 中从
offset 位置开始存放 len 个字节
int skipBytes(int n) boolean readBoolean( ) byte readByte( ) int readUnsignedByte( )
第14章 输入与输出
2.DataInputStream类的成员方法 由于InputStream是抽象类,因而不能直接创建对象。程 序中创建的输入流一般是InputStream类的某个子类的对象, 由这个对象来实现与外设的连接。为此,下面介绍 InputStream的子类DataInputStream类和BufferedInputStream 类的使用方法。表14.2列出了DataInputStream类的成员方法。