java完全自学手册-问答题解答.doc_第1页
java完全自学手册-问答题解答.doc_第2页
java完全自学手册-问答题解答.doc_第3页
java完全自学手册-问答题解答.doc_第4页
java完全自学手册-问答题解答.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

问答题解答1_1-Ans:在1991 Sun Microsystems 公司成一个名为Green 的内部研究计划,希望将程序安装在家电中,而计划的主持人James Gosling 将此程序语言命名为Oak,此为Java 语言的前身。一开始市场对在智能型家电的需求如预期而导致Green 计划遇到困难,直到1994 互联网开始盛,这让Sun 公司灵机一动使用Java 来制作动态网页, Java便一炮而红,在1995 五月Sun 公司正式来推出Java,目前还可用在企业应用程序设计、互联网服务器端程序设计等。1_2-Ans:Java Card应用在IC 卡,如IC 健保卡、融卡、签帐卡、电子钱包等。J2SEJava 2 Standard Edition 标准版,用于定位于客户端程序的应用设计,如桌面应用软件的程序设计。J2MEJava 2 Micro Edition 简版,用于嵌入式系统开发,如无线通信、手机、PDA等小型电子装置的程序设计。J2EEJava 2 Enterprise Edition 企业版,则用于分布式的网络程序的开发,J2EE 提供服务器端程序的应用设计。1_3-Ans:2001 10 月Nokia 已宣布与SUN 合作开发后,其他厂商(如摩托罗拉、西门子、BENQ 等)也陆续推出Java 手机。Java 手机拥有强大的通信功能,可以灵活自由地下载各类无线应用软件和游戏,备有实时信息传递(Instant Messaging)以及增强型信息服务(EMS)功能,使用户能享受高的动通信服务境界。手机厂商亦设置形形色色的JAVA 游戏、手机铃声、图像及无线Java 应用软件供用户下载,为用户带来精彩的娱乐生活,Java 风潮将再起飞。1_4-Ans:Hot Java 是双关语,它代表手上热腾腾的Java 咖啡可以帮您带来高质量的工作效,同时也隐喻Java 程序设计语言将引导您进入高报酬、具竞争的世界。此外,SUN 为Java 身订做的浏览器“Web Runner”,后来改名叫HotJava。1_5-Ans:接触过Java 的人,一定会对Java 两个个专用的logo 印象深刻,一个就是Java Cup,另一个就是叫作Duke 的吉物。这位可爱的Duke 是由Joe Palrang 在1992 时所创作出来的,Duke当时在Star 7 上所扮演的角色是类型Office 2000 中小帮手的功能。1_6-Ans:Java 需先经过编译的程序,将程序代码转成与平台无关的字节码即为byte-codes,再以直译的方式执。任何可以执Java 的软件,皆可看成是Java 的“虚拟机器”(JVM),因此可以将byte-codes 看成是JVM 所执的字节码。byte-coces 最大的好处,就是可以跨平台执,也就是只要编写一次,即可到处执。管作业系统为何,皆可以执无误,需要针对作业环境而做修改。1_7-Ans:字节码的执环境为 Java 虚拟机(Java Virtual Machine, JVM)。JVM 或内嵌于一般浏览器(Netscape, Internet Explorer),或由程序发展工具所提供 (如JDK)。任何有 JVM 环境的操作平台能执Java 程序,不论是 Windows 平台、Unix(Solaris, AIX, HP-UX,Linux 等)平台、Mac 平台或OS/2 平台。所以说Java 语言是“Write Once, Run Anywhere”其寓意就在此。1_8-Ans:“Write Once, Run Anywhere”是指Java 的byte-codes 可“编写一次,到处执”。管作业系统为何,皆可以在含有JVM 的平台执,无论是Windows、iMac 或Unix 系统中执无误,需要针对作业环境而做修改。1_9-Ans:请自作答。1_10-Ans:请自作答 。1_11-Ans:Java 的程序可以分为 (1)Java application-应用程序。(2) Java applet-应用在www 上的程序。Java application 是可以在Java 平台上独执的程序。而Java applet 则是内嵌于html 文件中,搭配浏览器执。1_12-Ans:请自练习。1_13-Ans:请自练习 。1_15-Ans:请自练习 。1_17-Ans:请自练习 。2_1-Ans:习题hw2_1 的执结果为:6+6=126*6=362_2-Ans:习题hw2_2 的执结果为:6+6=666*6=36在hw2_2 第7 中,将i+i 外面的括号去掉后,在输出时,会先打印第1 个i 值,而将i+i 中间的“+”视为“连接打印数据的+”,而非算术运算符的“+”,因此接着打印第2 个i 值,而得6+6=66。而在hw2_2 第8 中,将i*i 外面的括号去掉后,因乘号的运算顺序高于加号,因此和hw2_1第8 的执结果相同。2_5-Ans:main() method 之前要加上public static void 三个修饰符 。public 代表main()为公有的method。static 代表main()在没有创建类对象的情况下,仍可以执。void 则表示main()没有返回值。2_6-Ans:左大括号是类本体的开始,至右大括号。当某个指令的语句只一个时,也必须以一对大括号将这些语句括起来,形成一个区块或区段。加号(+)是print()中用来连接要打印的数据;同时也是Java 的算术运算符中的一员,用来处两个数的加法。分号(;)则是作为Java 语句结束的符号。2_7-Ans:println()是由print 与line 所组成的,意义是将后面括号中的内容打印,再把光标移到下一的开端。print()则只会将后面括号中的内容打印,并会把光标移到下一的开端。程式内容请参考hw2_7.java。在hw2_7 中,print()将后面括号中的内容East or west打印,并会把光标移到下一的开端,接着再以println()将home is best.打印后,把光标移到下一的开端。2_8-Ans:literal 是数字与文字的总称。Java 中的各种数据类型,包括字符、字、数值、常数 时,都称literal。2_9-Ans:程序内容请参考hw2_9.java。编译时没有产生错误信息,执时的信息如下:Main method not public.其中文意思为main() method 并非public 类中的method。这是因为main() method 如果没有声明成public,就能由外界来调用。2_11-Ans:请参考app2_4程序。在JCreator 执时,会出现如下的窗口,供使用者输入参数内容:执结果如下:/* output-Tom & Jerry-*/2_12-Ans:请参考hw2_12.java。执结果如下:C:cd javaC:javajavac hw2_12.javaC:javajava hw2_12 How are you?How $ are $ you?2_13-Ans:Java 中的变量或method 的名称即为标识符,它是使用者用来命名变量或是method 的文字,由英文大小写字母、数字或底线组合而成。关键字则是编译器本身所使用的标识符,如void、public 等,使用者能改或是重复定义它们。因此,我们自定义的变量或method 的名称,皆能与Java 的关键字相同。2_14-Ans:BBB NO135 artist _tenY2k _AMD println ChinaTimesChristmas Pentium4 TOMBO A1234jdk1_5 web2_15-Ans:(1) 某学生的名字:name(2) 学生的成绩:score(3) 圆的半径:radius(4) 圆的面积:area2_16-Ans:main 属于标识符,因为在适当的位置,还是可以重新定义它,如在另外一个包含main()method 类内。2_17-Ans:语法错误通常会发生在对该语句的使用方式熟悉,或是小心编写错误,这种错误通常由编译器编译之后,即可一一发现,再加以改。当程序本身的语法无误,执时的结果却符所需,就可能是犯语意错误。此时必须逐清查程序语句,甚至将程序的逻辑重新思考,才能将错误找出。2_18-Ans:此程序有多处错误,于下面供参考:第2 public类名称应与文件名hw2_19.java 相同,因此应为public class hw2_19。第4 批注“/*”符号必需是成双成对的,缺少“*/”符号。第6 程序语句后并没有分号“;”作为结束。第7 Java 变量名称有大小写分别,故Num 并没有被定义,或是与num 相同变量名称。同时system 的前缀要大写。2_21-Ans:Java 是以“/”符号开始,至该结束来表示批注的文字。当批注的文字超过一时,可以用“/*”与“*/”符号将批注文字括起来,这两 个符号之间的文字,编译器会做处。2_22-Ans:(1) 程序中加上批注,替变量取个有意义的名称、保持每一只有一个语句及适当的空,也可以用空格键或是Tab 键将程序语句缩排(indent)。(2) 除于程序的阅读与调试外,也可减少程序维护与开发的时间。3_1-Ans:(1) 8x 错误,能有数字以外的字符(2) 6M 错误,能有数字以外的字符(3) 58.64 正确(4) k7 错误能有数字以外的字符(5) $10095 错误,能有数字以外的字符(6) 847 正确(7) 38L 正确(8) 16.17F 正确3_2-Ans:(1) 64.156 float 类型 (2) 6.2E24 double类型 (3) 5.74e36 double 类型 (4) 512 short 类型 (5) 1.5E-08 double 类型 3_3-Ans:字属于非原始数据类型 ,因为这类的变量在声明时并会分配内存,必须另外分配。3_4-Ans:int 4 bytes -21474836482147483647char 1 byte 0255float 4 bytes -3.4E38(-3.4*1038)3.4E38(3.4*1038)double 8 bytes -1.7E308(-1.7*10308)1.7E308 (1.7*10308)3_5-Ans:(1) -36.48 -3.648E2(2) 1567.38 1.56738E3(3) 0.02345 2.345E-2(4) 0.000689 6.89E-43_6-Ans:(4) boolean flag=false; 可以被编译器接受。3_7-Ans:(1) 886 int(2) 12366L long(3) 53.472 double(4) 383.34F float(5) 367.87D double3_8-Ans:(1) float (2) float(3) short (4) int(5) boolean (6) long(7) byte (8) double(9) double (10) short3_11-Ans:请参考hw3_11.java。其执结果如下ch=E由于ch 的值为69,在Unicode 中,69 即为字符E 的十进制值,因此会出现如上的执结果。3_13-Ans:(1) 错误修改:第03 :由于整数常数看成是int类型,故6291830293487 这个整数因超出int 类型所能表示的范围而使得无法正常显示,故改为long num=6291830293487L; 即可改正。(2) 错误修改:第03 :由于在程序中声明字符变量ch 为跳脱字符时,必须以单引号包围,故此改为 charch=; 即可改正。第06 :将此修改为System.out.println(Think before you act! );(3) 错误修改:第03 :由于使用浮点数数值时,要在数值后面加上F 或是f 以做为float 类型的识别,没有加上有可能会在编译时发生错误,告诉您有可能会失去精确。故此改为float num=6.2F;即可改正。第04 :修改为System.out.println(num+*+num+=+(num*num);(4) 错误修改:第03 :由于是java.lang 类库中的关键字,故能使用小写,修改为Integer.MIN_VALUE; 即可改正。12 Java 2JDK5.0 教学手册(第三版)3_14-Ans:当两个整数相除时,由于小数点以后的数字会被舍去,使运算结果为整数,此时是将整数转换成浮点数,则运算结果会只有整数的部分,而失小数点之后的精确。希望得到运算结果为所预期的浮点数,则此时必须将两个整数其一或是全部强制转换类型为浮点数。如:将整数其中一个强制转换成浮点数,再与另一个整数相除,可用下面的语法:(float)a/ba/(float)b我们也可以将两个整数同时强制转换成浮点数后再彼此相除,如下面的语法:(float)a/(float)b3_15-Ans:在确定int 类型的变量值只会在short 类型能表示的范围中,就可以将int 类型的变量转换成short。3_16-Ans:将一个大于变量可表示范围的值设定给这个变量时,即称为缩小转换。在转换的过程中,可能会失数据的精确,因此Java 并会自动做此类型的转换。4_1-Ans:(1) 输出结果:a=14, b=14(2) 输出结果:a=4, b=33(3) 输出结果:a=5, b=454_2-Ans:值为true: (2)、(3)。值为false: (1)、(4)4_4-Ans:(1) num、7、12 与b 为操作数,“()”、“*”、“+”与“-”为运算符。(2) num、ans、5 与24 为操作数,“()”、“=”、“/”与“-”为运算符。(3) i 为操作数,“-”运算符。4_5-Ans:一般的运算符需要两个操作数,一个运算符,即可完成运算。4_6-Ans:(1) 8/2-9*3+12*5 (8/2)-(9*3)+(12*5)(2) 7-5/12+5*8/9 7-(5/12)+(5*8/9)(3) 15+4*5-20/3*12-2*7/5+9 15+(4*5)-(20/3*12)-(2*7/5)+94_7-Ans:(1) 2+72 & 89 & 210 | 72 true(6) 616 true(8) 21+10*653 true(9) 14+68 | 32-56 true(10) 36=10 true4_9-Ans:(1) a=11,b=20,num=-10(2) a=10,b=20,num=-200(3) a=11,b=21,num=31(4) a=9,b=19,num=29(5) a=210,b=21,num=04_11-Ans:(1) a=10,b=50(2) a=1,b=7(3) a=1,b=7(4) a=0,b=5(5) a=11,b=64_19.Ans:(1) 占用字节较少的转换成字节较多的类型。(2) 如short 类型(2 bytes)遇上int 类型(4 bytes),会转换成int 类型。(3) 字符类型会转换成short 类型(字符会取其Unicode 码)。(4) int 类型会转换成float 类型。(5) 表达式中的某个操作数的类型为double,则另一个操作数也会转换成double 类型。(6) 布尔类型能转换至其他的类型。4_20-Ans:(1) d/(s+i)+(ch*f)/ ( d ( i ) + * f )551.2551.521041618796ch s +6121.83104 5.3 7680.32102941176470584/ ( d ( i ) + * f )intintfloatfloatdouble doubledoublech s +double(2) ch-s*(f+i)/d12.369.6298677144769261104721.835.3750.334.37013228552308- ) s f + i / d * ( ch- ) s f + i / dfloatfloatfloatdoubledouble* (floatch (3) (i/f)+ch*(d-s)4_22-Ans:(1) ch/(s+f)-(i%d)=1.1536289119720458 double(2) ch*(s-f)/i-d=154.02 double(3) i+(f-ch)*s%(i+ch)=-75.3999 float(4) 25-(ch+s)/18=18 int-39.17-4072.35924535274535.3 7 21.83 611041.3207546 -4073.6800000000003i d ( / + * ( - s ) ch f )i d ( / + * ( - s )floatfloat doubledoubledoubledoublech f )doubledouble5_1-Ans:程序的结构分为循序性结构、选择性结构与重复性结构三种。循序性结构是采上至下(top to down)的语句方式,一语句执完毕后,接着再执下一语句。选择性结构是根据条件的成与否,决定程序要执哪些语句。重复性结构则是根据判断条件的成与否,决定程序段的执次数,这个程序段就称为循环主体。5_2-Ans:(2) 阿咪起床到回家的过程,属于循序性结构。5_3-Ans:(2)小惠上体育课的过程,属于重复性结构。5_4-Ans:(2) 阿华购物的过程,属于选择性结构。5_22-Ans:请参考下表的说明:5_23-Ans:其错误信息是:cannot find symbolsymbol : variable ilocation: class hw5_22System.out.println(i=+i+, sum=+sum);1 error由于变量i 是在for 循环里声明的,只能在for 循环里使用,在第9 中要将i 打印,此时变量i 已经离开for 循环,因此能再使用它。修正后的程序请参考hw5_23.java。5_24-Ans:sum: 第6 17 i: 第7 11 num: 第13 15 /* output-i=1, sum=1i=2, sum=2i=3, sum=6i=4, sum=24i=5, sum=120num=5sum=120-*/5_26-Ans:break 语句可以让程序强迫跳离循环,当程序执到break 语句时,即会离开循环,继续执循环外的下一个语句,如果break 语句出现在嵌套循环中的内层循环,则break 语句只会跳离当层循环。continue 语句可以强迫程序跳到循环的起头,当程序执到continue 语句时,即会停止执剩余的循环主体,而到循环的开始处继续执。6_1-Ans:变量类型为int,名称为mtrx,大小为6,长为4*6=24bytes。6_2-Ans:(1) 声明数组时,要以中括号 表示,正确声明方式应为:float height=new float35;(2) for 为关键字,能作为数组名称,且数据类型要前后一致。正确声明方式为:int num=new int8; 或是float num=new float8;数组名称只要是关键字皆可以自设定。(c) 声明数组要几过两个步骤,声明数组与分配内存给数组。因此正确的声明方式要改成:int mtrx=new int12;6_3-Ans:默认值为false。6_4-Ans:(1) 要改成int arr=6,7,8,9,1,2。(2) 要改成int arr=5,6,2,7,8,9。(3) 正确的语句。(4) 声明的数组元素必须全部是双浮点数。7_18-Ans:(1) 请参考hw7_18a.java。(2) 请参考hw7_18b.java。(3) 由于采用递归的方式,会重复计算相当多次的递归,导致输入的数愈大,需要计算的时间也就愈长(当n 值大于50 时,可以发现采用递归的方式,执时间明显增长),因此对于费氏数而言,采用循环,可以获得较佳的计算效。关于费氏数递归算法的效分析,请参考数据结构或算法相关书籍。8_1-Ans:(1) field:范畴,为java 类中的数据成员称之。(2) method:方法,java 称封装于类中的函数为method。(3) encapsulate:原意为“将装入胶囊内”,胶囊就是类,而数据成员与函数成员是被封入的东西。8_3-Ans:错误1: 12 ,应改为CRectangle rect1=new CRectangle();错误2: 14 ,rect1.width 的类型为int,因此能赋值成浮点数类型的数值,要改成int 类型的常数值。错误3: 15 ,rect2 没有被声明。错误4: 15 ,rect1.height的类型为int,因此能设值成浮点数类型的数值,要改成int 类型的常数值。修改后的程序代码请参考hw8_3.java。8_11-Ans:(5) set(6);8_12-Ans:这两个method 的参数个数和类型完全相同,编译器会无法判断要执哪一个method。因此这两个多载的method 是错误的。8_15-Ans:程序请参考hw8_15.java。编译后的错误信息为radius has private access in CCircle。由于pi 及radius 的属性设为private,因此能从CCircle 以外的类中调用。8_16-Ans:,由于area() method 被定义成private,因此能由所在类CCircle 之外的类中调用。8_17-Ans:由于CWin 类中的数据成员被设为private,因此能在CWin 类外部直接改它们的值。我们可以通过CWin 类中的public 或未加修饰符的成员函数,加以设定、改私有的数据成员。请参考修改后的程序hw8_17.java。8_18-Ans:将CWin 类中的数据成员的属性改为public,则在CWin 类外部亦可以调用、使用这些数据成员,虽然这样对于使用数据成员上,看来似乎较方,但也较容管,方控制数据成员的设值与使用权限。9_2-Ans:程序第4的this(6,10,8); 要与第3 交换,因为this()必须要是构造函数内的第一个语句,否则编译时会产生错误。正确的写法如下:01 public CBox()02 03 this(6,10,8);04 System.out.println(constructor called);05 9_3-Ans:(1) 请参考hw9_3.java。(2) 第27的程序代码会调用第7没有参数的构造函数Cdata()。第28的程序代码会调用第14有参数的构造函数Cdata(int a,int b)。(c) Cdata 类能声明成public,因为一个文件中只能有一个public 的类,而且与程序保存的文字文件名相同。如果要将Cdata 类声明成public,则必须将Cdata 类另存成一个文件,同时该文件的名称要为Cdata.java。(d) 由于成员num1及num2在hw9_3.java 中没有被其他类使用,因此当num1及num2声明为public,并会对本范有任何的影响。9_4-Ans:程序编译时发生错误,有两个解决的方法:(1) 在调用CBox()构造函数时,加入参数,也就是在第20 CBox box1=new CBox(); 加入参数值,完整程序请参考hw9_4.java。(2) 另外编写一个没有参数的CBox ()构造函数,请参考hw9_4a.java。9_5-Ans:(1) 实变量是属于各别对象所拥有,彼此之间能共享。当您改某个对象中的资成员之值,其他对象中的相同名称的数据成员,并会因此而受到影响。对象与对象之间的资成员各自存在于同的内存中,并会相互干扰。类变量是可由所有对象来共享,每一个对象的“类变量”均相同,改某个对象的“类变量”,其他对象的“类变量”也将随之改。类变量和实变量一样,必须在类中声明。要声明为“类变量”,则必须在变量前加上“static”修饰符。(2) 是创建在类中的函数,必须通过对象来调用它,具有此特性的函数就称为实函数。当对象存在时,实函数也就无法调用使用。类函数可由所有对象来共享的。每一对象均会调用相同一个类函数。可以通过对象来调用,也可以直接在产生对象的情形下调用。只要在method 前加上static 即可。9_6-Ans:由于pi 的值基本上会变动,会因为对象的同而有同的值,因此声明成static,成为类变量,让所有的对象共享,但可以节内存空间,也较为适合。9_7-Ans:将sqrt()声明成类函数,当使用者在调用时,即可必通过对象再调用,可以直接使用。9_8-Ans:(1)(5) 请参考hw9_8.java。(6) cnt 要用类变量,因为cnt 要用来计算CWin 类所创建的对象个数,因此可以声明成类变量,让所有CWin 类的对象共享。(7) count() method 可以声明成实函数与类函数。但由于count()声明成实函数时,由对象调用,对count()来说并没有特别的意义,因此建议将count()声明成类函数。9_12-Ans:compare() method 声明成static,可以通过对象就直接调用该method,如此也比通过对象调用compare() method 要来得名正言顺。9_14-Ans:(1) 请参考hw9_14a.java。(2) 请参考hw9_14b.java。(3) 将(2) mathAvg() method 编写成类函数的方式较好。由于程序要处的是整个数组,(1)小题在调用mathAvg() method 时,必须通过对象数组的某一个元素调用,虽然可以执,但是却觉得尽合。10_2-Ans:x 与y 声明成private 之后,就能从Caaa 以外的类访问,子类只能继承private 的变量,可以调用,但是能访问它们。10_5-Ans:请参考hw10_5a.java 的写法或是hw10_5b.java 的写法。其程序的错误是在于CData 类没有提供无参数的构造函数,当第34 创建CData 类的对象时,会调用无参数的构造函数CData,CData又会先调用父类CWin 的无参数构造函数,由于CWin 已编写有参数的构造函数,因此Java 再提供预设的无参数的构造函数,于是在找到构造函数的情形下,而产生错误。10_6-Ans:把数据成员声明成protected,可同时兼顾到成员的安全性与性,声明成protected 的成员,只能供父类与子类的内部访问,其他的类则无法改或读取。10_7-Ans:可以,因为Cbbb 是Caaa 的子类,数据成员x 与y 声明成protected,在Caaa 或Cbbb 类中皆可自由访问。10_9-Ans:(1)(5)完整的程序请参考hw10_9.java。(6) 以对象box1、box2 调用show()及vol() method 时,皆是由子类的show()及vol() method 会被调用10_14-Ans:“final”的功用是终止类、method、数据成员被继承、覆盖及修改其值。其使用时机如下:(1)某个类希望被其他的类继承。(2)父类的method 希望子类的method 来覆盖它,即可用final 关键字置于父类的method 名称前,即可终止继承。(3)希望数据成员在程序代码的任何地方再做修改时,加上final,则该成员(变量)就变成一个常数(constant),无法再修改它。10_15-Ans:将父类中的x 与y 声明为final 之后,首先要为声明为final 的成员设值,同时,该成员的值在程序其他地方皆无法再动,因此在习题1 中编写的程序代码,编译时会发生错误。10_16-Ans:(1)(4)完整的程序请参考hw10_16.java。(5) 程序编译后,产生如下的错误信息:show() in CData cannot override show() in CRectangle; overriddenmethod is finalpublic void show()上面的错误信息是说,CData 类中的show() method 能覆盖父类CRectangle中的show()mthod,父类CRectangle 中的show() method 为final,能被覆盖。其解决方法有两个,一是将CData 类中的show() method 删除,直接使用父类中的show()method,如程序hw10_16e.java;另一个方式,是将CData 类中的show() method 改名,在CData 类的area() method 中,调用新改名称的method,如程序hw10_16f.java。10_18-Ans:(1)、(2) 请参考hw10_18.java。(3) 多载。11_2-Ans:编译的错误信息是指CShape 是抽象的,无法实体化。也就是说CShape 是抽象类,没办法用CShape 创建对象。11_3-Ans:show() method 能声明成static,由于CShape 是抽象类,并非实体,能直接由类去调用类函数,如CWin.area()。11_6-Ans:习题1的CShape 是抽象类,抽象类中允许一般的method 存在;而习题5的iShape 是接口,接口只能做method 的声明,而允许在接口中对method 做细部的定义,因此习题5的show() method 的定义只能放在CWin 中,而能将show() method 的定义放在iShape 接口中。11_7-Ans:由于45 的method 是声明于iShape 接口中,在接口中声明的method,可以abstract 关键字。因此45 的method 之前可以加上abstract 关键字,也可以加。11_10-Ans:将第11覆盖之后,程序仍然可以执,而shwColor() method 则会变成CWin 类中自定义的method,而非实现iColor 接口中的method。11_13-Ans:(1) 请参考hw11_13.java。(2) 这是因为CCircle 类继承抽象类CSphere,必须要覆盖CSphere 类中的method,虽然CSphere 抽象类并没有实现接口iVolume,但通过CCircle 类的覆盖动作,替父类CSphere 完成实现。(3) 请参考hw11_13c.java。12_7-Ans:没有声明任何修饰符的成员,只能在同一个package 中的类来访问,同package 的类无法使用它。12_8-Ans:请参考J2SE 的参考文件,并自绘制。12_18-Ans:请参考hw12_18.java。本程序在编译时会有错,执时会出现如下的信息:Exception in thread main java.lang.NumberFormatException: Value out of range.Value:262904713 Radix:10at java.lang.Short.parseShort(Short.java:122)at java.lang.Short.parseShort(Short.java:78)at hw12_18.main(hw12_18.java:8)这是属于run-time error(执时期错误),Java 对于这种run-time error,有一套特殊的机制,因此会出现如上面的信息。关于这个部分的处,可以参考第13 章的说明。12_20-Ans:(1) 本是调用BigInteger(String val) 构造函数。(2) 将调用negate() method 的BigInteger 对象obj,以-obj 返回。(3) a.add(b.negate() 是做a+(-b) 的运算;而a.subtract(b) 是做a-b 运算,因此结果是相同的。(4) 请参考hw12_20.java 的第2021 与2223 。(5) 请参考hw12_20.java 的第2021 与2223 。13_1-Ans:(1) 编译时会有错误信息出现。 (2) 这个外是指发生在算术上的错误,由于程序中将i 设值为0,又将i 放在除数,而在数学上,0 是能当除数,因此Java 在执时抛出这个外。(3) 第14 会被执。因为Java 在执时抛出外,并暂停程序的执,因此第14 还来及执即被停止。13_5-Ans:请参考hw13_5.java。在本题中,使用try-catch-finally 区块会比if-else 来得简洁,而且可以避免在编写if-else 时,判断条件编写错误,而小心发生逻辑上的错误。13_7-Ans:请参考hw13_7.java。在本习题中,由于数组den1为0,程序执时,先遇到den1,即抛出ArithmeticException 外,因此会先由显示“除数为 0”的catch()接收。实际上, 是将数组值加修改, 或是数组的内容由使用者输入, 皆可能会发生ArrayIndexOutOfBoundsException 外,即“数组注标超出范围”的外。Java 在处外时,只要遇到一个外,即会中断并结束程序的执。因此如果修改数组的内容,执结果就有可能同,读者可以自试试。13_9-Ans:因为main() method 是声明为static,aaa() method 在main()中被调用,因此也必须要为static,如果加static 则程序无法正确的编译与执。14_1-Ans:InputStream、OutputStream 类是用来处“位”,也就是二进制文件,同时它也可以处纯文本文件。Reader、Writer 类则是用来处“字符”,也就是纯文本文件。14_3-Ans:Writer 类中的子类BufferedWriter 、CharArrayWriter 、PipedWriter 、FilterWriter、OutputStreamWriter、StringWriter 与PrintWriter 等皆覆盖flush() method。14_4-Ans:请自查阅对比。14_11-Ans:请参考hw14_11 .java。请注意,由于本程序产生随机数,因此执结果会有同的内容。14_12-Ans:,由于FileReader 与FileWriter 类只能处纯文本文件,gif 图形文件属二进制,因此无法处。15_1-Ans:边听mp3 并边编译java 程序,操作系统是在做多线程的处。15_2-Ans:(1)(3) 请参考hw15_2.java。(4) 程序执时,会先将“Hello 1” “Hello 5”打印完毕之后,再打印“Good bye 1” “Good bye 5”。要使用多线程时,必须要用start() method 来启动,由start() method 在排程器中登录该执绪,当这个线程开始执,run() method 自然就会被调用。像hw15_2 直接调用run() method,只是在程序中将run() method 执,并会启动多线程。15_4-Ans:请自绘制。15_7-Ans:当类必须继承某个类,又必须继承Thread 类,此时即会有多重继承的问题出现。Java提供的Runnable 接口,恰好可以解决这个问题,只要以类实现Runnable 接口,即可创建线程。15_10-Ans:线程在产生和销毁之前,会处于下四种状态之一:新创建的、可运行的、被冻结的与死亡的状态。其转移与method 之间的关系图,请参考图15-3-1。15_11-Ans:sheep(6000)即是让线程进入冻结的状态,其时间为6 秒。15_15-Ans:sleep() method 是Thread 类中的类函数,因此必通过对象即可调用。15_16-Ans:synchronized 是“同步”的意思,在method 之前加上synchronized,可以使得各线程在时间上取得协调,一次仅允许一个线程进入run() method 中进处,其他的线程只能等候该线程处完run() method 之后才能进入。15_18-Ans:请参考hw15_18.java。(1) 第一个计算2100000 的质数个数的线程先跑完。(2) 由执结果可以看到,2100000 的质数有9592 个,100000200000 的质数有 8392 个个,因此,2100000 的质数较多。注:本范的执时间可能会稍久,其原因在于本题所用的搜寻质数的算法的效并是很好,读者可查阅算法相关的书籍,寻找一个较好的算法来改善执速。15_19-Ans:当我们用鼠标单击横躺的长条图之后,这三种排序即可同时展开,三个同的排序程序在同一个时间中运行,就是执绪的应用。16_1-Ans:JDK 1.2 版以后的版本,提供全新的处与保存集合对象的统一架构,称为Java CollectionsFramework,包括三个部分:(1) 接口。(2) 算法。(3) 实现。而架构中的实现部分,即是各种collection 接口的实现,主要有“Set”、“List”及“Map”三大类。16_2-Ans:集合对象以泛型类型存储时,但可以避免执时期错误的发生,也可以去必要的类型转换。16_4-Ans:(1) 程序的执结果为:/* output-HashSet 的内容: 13, 9, 38, 182, 5TreeSet 的内容: 10, 13, 16, 19-*/(2) 由程序的执结果可以看到,tset 的内容中并没有将hset 的元素加入,因此符程序所需。这是因为第7 创建好hset 之后,hset 并没有任何的元素,在第8 创建tset 时就将hset 加入,并会将后来增加元素的hset 内容一起新,因此看起来好像没有将hset 加入tset 中。是要将hset 的元素加到tset 中,就要在hset 增加完元素后,再创建tset。修改后的程序请参考hw16_4.java。16_12-Ans:(1) 程序的执结果为:/* output-HashSet 的内容:-*/(2) 由程序的执结果可以看到,itr 并没有访问hset 的元素,这是因为第7 创建好hset 之后,hset 并没有任何的元素,在第8 用iterator() method 将hset 的元素转换成Iterator接口的对象时,根本没有元素被转换过去。是要将hset 的元素转换成Iterator接口的对象,就要在hset 增加完元素后,再进转换。修改后的程序请参考hw16_12.java。17_1-Ans:请自开启,并试着操作其中展示的功能。17_3-Ans:请参考表17.2.1。17_7-Ans:因为在setForeground() method 中,传入method 的参数,必须是由Color()类所产生的对象,因此先用new 产生一个对象,再将对象传给setForeground()。17_8-Ans:LEFT、CENTER 与RIGHT 是属于类变量。17_9-Ans:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论