《Java 2面向对象程序设计》参考答案

第一章 单数题参考答案
1-1 在1991年Sun Microsystems公司成立了一个名为Green的内部研究计划,希望将程序安装在家电中,而计划的主持人James Gosling将此程序语言命名为Oak,为Jave语言的前身。一开始市场对于智能型家电的需求不如预期而导致Green计划有困难,直到1994年因特网开始盛行,让Sun公司灵机一动使用Java来制作动态网页,也拜网络盛行之赐而使Java一炮而红,在1995年5月Sun公司正式推出Java,目前还可利用在企业应用程序设计、全球信息网服务器端程序设计等。
1-3 2001年10月Nokia已宣布与SUN合作开发后,其他厂商(如摩托罗拉等)也表示明年将陆续推出Java手机,以刺激非语音市场的成长,预计相关功能可以如期完成,Java风潮将再度起飞。
1-5 接触过Java的人,一定会对Java两个专用的logo印象深刻,一个就是Java Cup,另一个就是叫作Duke的吉祥物了。这位可爱的Duke是由Joe Palrang在1992年时所创作出来的,Duke当时在Star 7上所扮演的角色是类似Office 2000中小帮手的功能。
1-7 位码的执行环境为 Java 虚拟机(Java Virtual Machine, JVM)。JVM 或内嵌于一般浏览器(Netscape, Internet Explorer),或由程序开发工具所提供 (Sun Microsystems' Java Development Kit, JDK)。任何有 JVM 环境的操作系统都能执行Java程序,不论是 Windows 系统、Unix(Solaris, AIX, HP-UX,Linux 等等)系统、Mac系统或OS/2系统。所以说Java语言是"Write Once, Run Anywhere"其寓意就在此。
1-9 是指Java的byte-codes可「编写一次,到处运行」,当您用任何一种Java编译器编译成byte-codes时,便可在含有JVM的系统运行,无论是Windows、iMac或Unix。
1-11 请自行前往观看。
1-13 请参考hw1_13.java。
1-15 请参考hw1_15.java。

第二章 单数题参考答案
2-1 请参考下面的程序代码:
01 public class myjava
//定义public 类myjava
02 {
03 public static void main(String args[])
04 {
05 int i;
// 声明变量i
06 i=5;
// 将i赋值为2
07 System.out.println(i+
"+"+i+"="+(i+i)); // 印出内容
08 System.out.println(i+
"*"+i+"="+(i*i)); // 印出内容
09 }
10 }
2-3 变量名称不能使用到Java的关键词,其他的英文字母、数字或底线皆可。此外,Java的变量有大小写之分,会将其判断成两个不同的变量。
2-5 请参考hw2_5.java。
2-7 需加上public static void这三个修饰符(modifier):
public--代表main()为公有的method。
static--表示在main()在没有建立类对象的情况下,仍然可以执行。
void--表示main()没有返回值。
2-9 System.out是指标准输出,通常与计算机的接口设备有关,如打印机、屏幕等。其后接续了文字pirntln,是由print与line所组成的,意义是将后面括号中的内容打印出来,再把光标移到下一行的开端。
2-11 请参考hw2_11.java。错误信息:Main method not public中文意思是说main() method缺少public,故可知Java程序内一定要有public
2-13 方法一:在声明的时候赋值。
方法二:声明后再赋值。
方法三:在程序中的任何位置声明并赋值。
2-15 _artist, __two, ___AMD, println, ChinaTimes, Y2k, Pentium, TOMBO, A1234, jdk1_3, NO1, AAA。
2-17 main属于标识符,因为可以更改或是重复定义它。
2-19 请自行实现。
2-21 此程序有多处错误,列于下面供参考:
第4行批注
/*符号必须是成双成对的,缺少了*/符号。
第6行程序语句后并没有分号(;)作为结束。
第7行Java变量名称有大小写分别,故Num并没有被定义,或是与num相同变量名称。
2-23 (1) 除了便于程序的阅读与调试外,也可减少程序维护与开发的时间。
(2) 程序中加上批注,替变量取个有意义的名称、保持每一行只有一个语句及适当的空行,也可以利用空格键或是Tab键将程序语句缩排(indent)。


第三章 单数题参考答案
3-1 (a) 2B (X) 整数常数不能有数字以外的其他字符
(b) 1A (X) 整数常数不能有数字以外的其他字符
(c) 3.20 (O)
(d) a5 (X) 整数常数不能有数字以外的其他字符
(e) $53 (X) 整数常数不能有数字以外的其他字符
(f) -67 (O)
(g) 2I (X) 整数常数不能有数字以外的其他字符
(h) 6.34K (X) 整数常数不能有数字以外的其他字符
3-3 字符串属于非原始数据类型,因为这类的变量在声明时并不会配置内存,必须 另外进行内存配置的操作。
3-5 (a) -96.43 ---> -9.643E2
(b) 1974.56 ---> 1.97456E3
(c) 0.01234 ---> 1.234E-2
(d) 0.000432 ---> 4.32E-4
3-7 请参考下表:
整数类型 最大值 最小值
long (长整数) 9223372036854775807 -9223372036854775808
int (整数) 2147483647 -2147483648
short (短点数) 32767 -32768
byte (位) 127 -128

3-9 请参考下表:
数据类型 默认值
byte 0
int 0
float 0.0f
char \u000
boolean false

3-11 请参考hw3_11.java。
3-13 请参考hw3_13.java。
3-15 (1) 错误修改:
第03行 :由于整数常数看成是int类型,故32998399887这个整数因超出int类型所能表示的范围而使得无法正常显示,故改为long num=32998399887L; 即可改正。
(2) 错误修改:
第03行: 由于在程序中声明字符变量ch为转义字符时,必须以单引号包围,故此行改为 char ch='\"';即可改正。
第06行: 将此行修改为System.out.println(
"\"Birds are flying! \"");。
(3) 错误修改:
第03行:由于使用浮点数数值时,默认的类型是double,所以在数值后 面加上F或是f以做为float类型的标识,若没有加上有可能会在编译时发生错误,告诉您有可能会失去精确度。故此行改为float num=2.0F; 即可改正。
第04行:修改为System.out.println(
"num*num= "+(num*num)); 即可改正。
(4) 错误修改:
由于是java.lang类库中的关键词,故不能使用小写,修改为Integer.MAX_VALUE; 即可改正。
<请参考ans3_15.java。>
3-17 当两个整数相除时,由于小数点以后的数字会被截断,使运算结果为整数,故此时若希望得到运算结果为所预期的浮点数,则此时必须将两整数其一或是全部强制转换类型为浮点数。
例如:
(float)a/b
// 将整数其中一个强制转换成浮点数,再与另一个整数相除
a/(float)b
(float)a/(float)b
// 将两个整数同时强制转换成浮点数后再彼此相除
3-19 由于从键盘中所输入的数据Java都视为字符串,故必须通过转换的操作来达成。
数据类型 转换的method()
long Long.parseLong()
int Integer.parseInt()
short Short.parseShort()
byte Byte.parseByte()
float Float.parseFloat()
3-21 请参考hw3_21.java。
第四章 单数题参考答案
4-1 (a) 输出结果:a=9 b=9
(b) 输出结果:a=0 b=3
(c) 输出结果:a=0 b=15
4-3 表达式―Java语句类型中的其中一种语句,由操作数与运算符所组成。而操作数可以是常数、变量,或是函数。
运算符-- 数学上的运算符号。Java所提供的运算符除了处理一般的数学运算外,还可以做逻辑运算、地址运算等。
4-5 请参考下表:
算数运算符 意义 如何运作
+ 加法 将加法运算符的前后两个操作数相加
- 减法 将前面的操作数减去后面的操作数
* 乘法 将乘法运算符的前后两个操作数相乘
/ 除法 前面的操作数除以后面的操作数
% 取余数 前面除以后面的操作数,取其得到的余数

4-7 请参考下表:
关系运算符 意义
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

4-9 请参考下表:
逻辑运算符 意义 使用方式
&& AND,且 两个操作数皆为真,运算结果才为真
|| OR,或 两个操作数只要一个为真,运算结果就为真

4-11 可参考hw4_11.java。
(1) 6+4<9+12 true
(2) 16+7*6+9 67
(3) (13-6)/7+8 9
(4) 7>0 && 6<6 && 12<13 false
(5) 8>0 || 12<7 true
(6) 8<=8 true
(7) 7+7>15 false
(8) 19+34-6>4 true
(9) 12+7>0 || 13-5>6 true
(10) 3>=5 false

4-13 请参考hw4_13.java。
4-15 请参考hw4_15.java。
4-17 请参考hw4_17.java。
4-19 占用的字节较少的转换成字节较多的类型。
short类型(2 bytes)遇上int类型(4 bytes),会转换成int类型。
字符类型会转换成short类型(字符会取其Unicode码)。
Int类型会转换成float类型。
若表达式中的某个操作数的类型为double,则另一个操作数也会转换成double类型。
布尔类型不能转换至其他的类型。
第五章 单数题参考答案
5-1 循序性结构是由上至下(top to down)的语句方式,一行语句执行完毕后,接着再执行下一行语句。这种结构的流程图如下所示:







5-3 迭代性结构则是根据判断条件的成立与否,决定程序段落的执行次数,这个程序段落就称为循环主体。迭代性结构的流程图如下图所示:







5-5 对于有些问题,无法事先知道循环该执行多少次才够,此时,就可以考虑使用while循环及do while循环。while循环执行的流程:(1)第一次进入while循环前,就必须先设置循环控制变量(或表达式)的起始值。 (2)根据判断条件的内容检查是否要继续执行循环,如果条件判断值为真(True),继续执行循环主体;条件判断值为假(False),则跳出循环执行其他语句。 (3)执行完循环主体内的语句后,重新设置(增加或减少)循环控制变量(或表达式)的值,由于while循环不会主动替我们更改循环控制变量(或表达式)的内容,所以在while循环中设置循环控制变量的工作要由我们自己来做。再回到步骤2重新判断是否继续执行循环。
5-7 请参考hw5_7.java。
5-9 请参考hw5_9.java。
5-11 break语句可以让程序强迫跳离循环,当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句,如果break语句出现在巢状循环中的内层循环,则break语句只会跳离当层循环。
5-13 请参考hw5_13.java。
5-15 当程序中有分歧的判断语句时,就可以用if-else语句处理。当判断条件成立,即执行if语句主体,判断条件不成立时,则可以执行else后面的语句主体。
5-17 请参考hw5_17.java。
5-19 请参考hw5_19.java。
5-21 请参考hw5_21.java。
5-23 请参考hw5_23.java。
5-25 请参考hw5_25.java。
5-27 请参考hw5_27.java。
5-29 请参考hw5_29.java。
5-31 请参考hw5_31.java。
5-33 请参考hw5_33.java。
5-35 请参考hw5_35.java。
5-37 请参考hw5_37.java。
5-39 请自行测试它。

第六章 单数题参考答案
6-1 (a) 改为float num[30];
(b) for为关键词,不能做为数组名。
6-3 (a) 要改成int arr[]={1,2,3,4,5,6}。
(c) 要改成int arr[]={1,2,3,4,5,6}。
(d) 声明的数组元素必须全部是整数。
6-5 请参考hw6_5.java。
6-7 请参考hw6_7.java。
6-9 请参考hw6_9.java。
6-11 请参考hw6_11.java。
6-13 请参考hw6_13.java。
6-15 请自行验证。
6-17 请参考hw6_17.java。
6-19 请参考hw6_19.java。
6-21 请参考hw6_21.java。
6-23 请参考hw6_23.java。
6-25 请参考hw6_25.java。



第七章 单数题参考答案
7-1 请参考课本的解说。
7-3 (a) field:范畴,为java 类里的数据成员。
(b) encapsulate:原意为「将…装入胶囊内」,现在胶囊就是类而数据成员与 函数成员便是被封入的东西。
(c) method:方法,java称封装于类内的函数为method
7-5 请参考hw7_5.java。
7-7 请参考课本。
7-9 请参考hw7_9.java
7-11 请参考课本自行实现。
7-13 参数不同。当调用method并传递参数时,如传递进来的数为整数类型者,即执行show_area(int r)这个函数,如传递进来的数为double类型者,即执行show_area(double r)这个函数。
7-15 使用method时,可以传递参数到method内,也可以让method返回特定的值到调用端的程序,这个返回来的值称为「返回值」。
如果method有返回值,则要在一开始声明时就要写上「返回值类型」,在类的method中可将参数处理,并将结果返回调用端。Java允许传递多个参数到method中,但返回值却只能有一个。
7-17 请参考hw7_17.java。
7-19 在field声明前面加上private,即声明此数据成员为私有成员。
若在field声明前面加上public,即为公有成员。
私有成员无法从类以外的地方设置或读取,因此可达到数据保护的目的。
如要访问必须建立一个机制来限定类中field 的访问。
建立公有成员后,在类外部可对公有成员做访问的操作,因此可通过公有成员的method,让私有成员供外界访问。



第八章 单数题参考答案
8-1 相同的method名称,如果参数个数不同或是参数个数相同、类型不同,method便具有不同的功能。
8-3 请参考hw8_3.java。
8-5 (b) 因为题目的参数类型为整数类型,所以只有(b)符合。
8-7 在建立对象时,便会自动调用,并执行构造函数的内容。
8-9 默认的构造函数格式:
public CCircle()
// 假设名称为CCircle 类默认的构造函数
{
}
默认的构造函数,是在没有事先定义好构造函数时,则java会使用此版本的构造函数
8-11 (a) 在类里加入:
public CRectangle(int w,int h)
{
width=w;
height=h;
}

(b) 在类里加入:
public CRectangle(int s)
{
this(5,10);
// 调用另一个构造函数来达成width=w;height=h
}

(c)在传递参数方面就采用多载技术,如果传递两个变量就执行(a)的构造函数,如只传递一个变量就执行(b)构造函数。
8-13 类变量是可由所有对象来共享,每一个对象的「类变量」均相同,更改了某个对象的「类变量」,其他对象的「类变量」也将随之更改。类变量和实例变量一样,都必须在类中声明。要声明为「类变量」,则必须在变量前加上「static」这个修饰符。
类方法也是可由所有对象来共享的。每一对象均会调用相同一个类方法。可以通过对象来调用,也可以直接在不产生对象的情形下调用。只要在method 前加上static即可。
8-15 (1) 访问的限制:「类方法」内部无法对「实例变量」与「实例方法」进行访问。
(2) 不能使用this关键词:因为this是代表调用该method的对象,如今「类方法」既不需对象来调用,this自然亦不应存在「类方法」内部。
8-17 因为每一个由CCircle 类所建立的对象,其pi值均相同,因此把这个变量分享给每一个对象,可节省可观的内存空间。
8-19 用搜集残余内存(garbage collection)的机制来处理回收的事宜
片段:
CCircle cir1=new CCircle();
// 建立对象,并配置内存给它
// 将cir1指向null ,代表cir1已不再指向任何对象, 即回收内存
cir1 = null ;
8-21 1. 声明类类型的数组变量,并用new配置内存空间给数组。
2. 用new产生新的对象,并配置内存空间给它。
8-23 请参考hw8_23.java。
8-25 请参考hw8_25.java。




第九章 单数题参考答案
9-1 是为了要帮助继承自父类的成员做初始化的操作。
9-3 相似之处:
1、 当构造函数有多载时,this()与super()均会根据所给予的参数类型与个数正确地执行相对应的构造函数。
2、 均必须编写在构造函数内的第一行,也就是因为这个原因,this()与super()无法同时存在同一个构造函数内。
使用的区别:1、this()是在同一类内调用其他的构造函数。
2、super()是从子类的构造函数调用其父类的构造函数。
9-5 答案在hw9_5.java。
9-7 (1)无影响。(2)protected 较好!因为只让子类能够访问父类的数据成员,可以顾到数据成员的安全性和便利性。
9-9 答案在hw9_9.java。
9-11 答案在hw9_11.java。
9-13 功能:
(1)设置终止继承,在父类的method之前加上「final」,如此该method便不会被覆盖。
(2)设置数据成员变量成为常数,在该数据成员之前加上「final」,如此该
数据成员便无法在程序代码的任何地方再做修改。
时机:
(1)当父类的method 不希望子类的method 来覆盖它。
(2)不希望数据成员在任何地方被修改。
9-15 请自行参考课本。
9-17 因为声明父类变量才能指向子类
错误一:Cccc 不是Caaa的父类所以Cccc不能指向Caaa
错误二:Cccc 不是Cbbb的父类,子类变量不能指向父类变量。
错误三:Cccc 不是Cbbb的父类,子类变量不能指向父类变量。
第十章 单数题参考答案
10-1 抽象类有点类似「模板」的作用,其目的是要您依据它的格式来修改并建立新的类。定义:
abstract class 类名称
//定义抽象类
{
声明数据成员;
返回值的数据类型method 名称(参数……)
{

}
// 定义抽象method。注意在抽象method里,没有定义处理的方式。
abstract class返回值的数据类型method 名称(参数……);
}
10-3 因为抽象类是类似「模板」的作用,依据此「模板」的格式来修改并建立新的类,所以抽象类不能直接产生新对象。
10-5 请参考hw10_5.java。
10-7 不能,因为在利用类compute再声明一新类类型变量时,就会发生位置重复的现象。
10-9 定义:
interface 接口名称
// 定义抽象类
{
final 数据类型 成员名称=常数;
// 数据成员必须设置初值
abstract 返回值的数据类型 method 名称(参数…);
// 没有定义处理的方式。
}
10-11 请参考hw10_11.java。
10-13 可以,加不加abstract 都没有差别,因为在接口里的method 全部都是抽象方法了。
10-15 将类和两个以上的接口实现在一起,如此一来,类里的method必须明确定义每一个接口里的method,因而可达到多重继承的目的。
10-17 可以正确执行,因为在类compute 里,mod()、fac()、pow()这些method 皆有完整的语句。就等于一般的method 一样,当然可以正确执行。
10-19 请参考hw10_19.java。
第十一章 单数题参考答案
11-1 在开发大型程序时,为了工作上的需要,程序代码的开发通常是几个人,或者是几个小组同时进行。每个参与的小组或成员分别负责某些类,并将所编写的类分开存储在各别的文件中,直到所有的类均开发好,再分别编译与执行。这种概念是利用文件分割的方式,将大型程序分开成独立的类,以利程序的开发与维护。
11-3 请参考hw11_3数据夹中所示。
11-5 如果在源文件中没有指明package,那么Java便把它当成没有名称的package来处理?
11-7 请参考本书本文。
11-9 因package越建越多时,将package分门别类也就愈加重要。「子package」:把packages划分为上下层次的关系,使得程序代码的编写与维护更加容易。
11-11 请参考hw11_11.java。
11-13 请参考hw11_13.java。
11-15 请参考hw11_15.java。
11-17 请参考hw11_17.java。


第十二章 单数题参考答案
12-1 当程序运行时,有时可能会产生一些非预期的错误,这些错误即称为异常,如 (1)打开的文件并不存在,(2) 访问数组时,数组的注标值超过了数组容许的范围,(3) 原本预期用户由键盘输入的是整数,但用户输入的却是英文字母。
Java的异常处理机制具有易于使用、可自行定义异常类、允许我们抛出异常,且不会拖慢执行速度等优点。因而在设计Java程序时,应充分地利用Java的异常处理机制,以增进程序的稳定性及效率。
12-3 trycatchfinally的基本格式:
try{
要检查的程序语句;
...
}
catch(异常类 变量名称){
异常发生时的处理语句;
...
}
finally{
一定会执行的程序代码;
}

处理异常的步骤:
(1) try程序块若有异常发生时,(2) 程序的运行便中断,(3) 并抛出“由异常类所产生的对象。
(2) 抛出的对象如果属于catch()括号内所欲捕获的异常类的话,则catch会捕获此异常,然后进到catch的块里继续执行。(3)无论是try程序块是否有捕获到异常,或者捕获到的异常是否与catch()括号里的异常相同,最后一定会执行finally块里的程序代码。(4)finally的块执行结束后,程序再回到try-catch-finally块之后的地方继续执行。
12-5 异常类指的是由程序抛出的对象所属的类。
12-7 (1) 交由Java默认的异常处理机制做处理。
(2) 自己编写try-catch-finally块来捕获异常。
12-9 Error类专门用来处理严重影响程序运行的错误(error),但通常我们不会设计程序代码去捕获这种错误,其原因在于即使捕获了它,也无法给予适当的处理。相较于Error类,Exception类则包含了一般性的异常,这此异常通常在捕获到之后便可做妥善的处理,以确保程序继续运行。
12-11 (1)在程序中抛出异常。(2)指定method抛出异常。
12-13 自定义异常类的语法:
class 异常名称 extens Exception
{
... ...
}
12-15 (1)直接由method抛出异常,让Java默认的异常处理机制来处理。(2)在程序代码内编写try-catch-finally块来捕获由系统抛出的异常,如此便不用指定main() method要抛出IOException异常。





第十三章 单数题参考答案
1. 输入(input)与输出(output)在每一种程序语言里均扮演了相当重要的角色,借助输入与输出,我们可以在程序里和外界互动,从外界接收信息,或者是把信息传递给外界。
3. InputStream与OutputStream类通常是用来处理以「位流」,也就是二进制文件,而Reader与Writer类则是用来处理「字符流」,也就是纯文本文件(text file)。
5. 请自行查阅对比。
7. newLine()可写入换行字符,而且与操作系统无关,使用它可确保程序可跨系统运行。
9. 请参考hw13_9.java。
11. 请参考hw13_11.java。
13. 请参考hw13_13.java。
15. 不可以,因为FileReader与FileWriter类只能用来处理纯文本文件。



第十四章 单数题参考答案
1. 线程(thread)是指程序的执行流程,「多线程」的机制则是可以同时执行多个程序块,使程序运行的效率变得更高,也可克服传统程序语言所无法设计的问题。
3. 单一线程和多个线程不同处,在于单一线程一次只能执行一个程序片段,而多个线程则一次可以执行好几个程序片段。
5. 一万次与一亿次只差在执行所需要的时间长短,而执行结果哪一个字符串先出现则不一定,全看谁抢到CPU的资源,也因此您屏幕上的输出每次都不会一样。(可自行执行app14_2.java与hw14_5.java两个程序做比较)
7. 如果类本身已经继承了某个父类,但现在又要继承Thread类来建立线程,我们马上面临到一个问题。也就是说,不能继承了某个类,同时又继承Thread类时,就必须以类实现Runnable接口来建立线程。
9. 请参考hw14_9 .java。
11. (1) 该线程调用对象的wait() method。
(4) 该线程本身调用sleep() method。
(5) (3)该线程和另一个线程join()在一起时。
13. sleep(9000)代表让线程小睡9秒钟,时间一到它就会自动醒来。
15. 因为sleep()会抛出InterruptedException异常,所以sleep()必须要写在try-catch块内,且catch接收的必须是InterruptedException异常。
17. synchronized本意是「同步」的意思,在add() 之前加上这个关键词可以使得各线程在时间上取得协调,一次只允许一个线程进入run() method进行处理,而其他的线程只能等候该线程处理完run() method之后才能进入处理。
19. 因为sleep()是Thread类里的一个method。
21. 请参考hw14_21.java。





第十五章 单数题参考答案
1. AWT是用来处理图形最基本的方式,它可以用来建立Java的applet及窗口程序。Swing可以说是Java未来的架构。Swing所提供组件的数目远超过AWT的组件,并且每一个AWT的组件都有Swing组件可以取代它。目前SUN已经不再扩充AWT,而致力发展Swing。有趣的是,AWT并不会因此而消失,因为Swing是基于AWT而发展的,所有Swing的组件均是以AWT的Container类为基础来开发设计的,因此Swing的关键技术在于AWT,要了解Swing的技术必须先了解AWT的技术才行。
3. 需加上下面两行指令:
frm.addWindowListener(new WindowAdapter(){public void
windowClosing(WindowEvent e){System.exit(0);}});
5. 请参考表15_3。
7. 因为setForeground() method所接收的,必须是由Color()类所产生的对象才行,因而此处我们先用new来产生对象,再把对象传给setForeground()。
9. Font.BOLD+Font.ITALIC
11. 请参考hw15_11.java。
13. 请参考hw15_13.java。
15. (1) 文字区(text area)可看成是二维的文本框,它可呈现多行文字,并具有自动换行的功能。它也可以与滚动条(scroll bars)搭配,拉动滚动条来观看文件其他部 分的内容。而文本框是AWT里最基本的文字处理组件,它可以输入文字,也可以把输入的文字转成特定的符号。
(2) 采用文本框好。
17. 版面配置是指窗口上的组件依循一定的规则来排列,并会随着窗口的大小来改变组件大小与位置的一种配置方式。利用版面配置,可方便我们在窗口上配置组件,省去指定组件位置的困扰。
19. 请参考hw15_19.java。
21. 请参考hw15_21.java。



第十六章 单数题参考答案
1. 委派事件模型是指当事件发生时,产生事件的对象,会把此一信息转给「事件聆听者」处理的一种方式,而这个信息事实上是java.awt.event事件类库里的某个类所建立的对象,我们暂且把它称为「事件的对象」。
3. Java把事件类大致分为两种:语意事件与底层事件,其中语意事件直接继承自AWTEvent,如ActionEvent、AdjustmentEvent与ComponentEvent等均是。底层事件则是继承自ComponentEvent类,如ContainerEvent、FocusEvent、WindowEvent与KeyEvent等均属之。
5. 请参考表16_2。
7. 请参考hw16_7.java。
9. 「选项事件」的发生,是当窗口中的选项组件,如Checkbox、Choice与List等被选取时。Java以ItemEvent类来处理这个事件。ItemEvent的数据成员与method及主要功能请参考表16_3。
11. 请参考hw16_11.java。
13. 请参考hw16_13.java。
15. 请参考hw16_15.java。
17. 请参考hw16_17.java。
19. 请参考hw16_19.java。










第十七章 单数题参考答案
1. 选择窗体(list)可用来一次显示多个选项,Java以List类来建立它。选择窗体的使用方式相当简单,先用List类的add() method 将选项加到窗体内,再利用程序来控制窗体的显示方式。
3. 请参考hw17_3.java。
5. 请参考hw17_5.java。
7. 请参考hw17_7.java。
9. 请参考hw17_9.java。
11. 滚动条包含了两个滚动条箭头(位于滚动条两端)、一个滚动条盒(用来拖曳滚动条)以及滚动条列(用来放置滚动条盒)。它可以帮助我们处理哪些事情:请参考表17_6。
13. 请参考hw17_13.java。
15. 请参考hw17_15.java。
17. 文件对话框是相当常用的一种对话框,专门用来处理文件访问等相关事务。它把常用的组件都已建好在一个对话框内,用法与对话框并没有太大的差异。






lunzi   2005-05-02 04:53:06 评论:2   阅读:5543   引用:0
应该是这个吧,时间太长了,我也记不得了 @2007-12-06 14:19:08  lunzi
// app17_3, 建立选择窗体
import java.awt.*;  
public class app17_3 extends Frame
{
   static app17_3 frm=new app17_3();
   static Choice chc=new Choice();   // 建立下拉菜单对象chc
   public static void main(String args[])
   {
      frm.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
      frm.setTitle("Choice class");
      for(int i=0;i<=4;i++)    // 利用for循环加入选项
         chc.add("Choice Item "+i);
      frm.setSize(200,150);
      frm.add(chc);
      frm.setBackground(Color.yellow);
      frm.setVisible(true);
   }
}
@2007-12-03 23:01:07  游客
请参考hw17_13.java。
这要怎么样才能看到呢

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2004-2010 powered by YuLog