• 411.89 KB
  • 2022-04-22 11:23:17 发布

Java程序设计实用教程 (胡伏湘 著) 清华大学出版 课后答案

  • 43页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《Java程序设计精典教程》习题答案编著:胡伏湘,雷军环清华大学出版社第一章习题答案第一章习题答案第一章习题答案一、简答题1.Java语言有哪些特点?主要用于能够哪些方面的软件开发?特点:(1)面向对象,(2)平台无关性,(3)分布式,(4)可靠性和安全性,(5)多khaw.com线程,(6)简单性,(7)健壮性,(8)高性能,(9)灵活性。适用范围:(1)所有面向对象的应用开发,包括面向对象的事件描述、处理、综合等。(2)计算过程的可视化、可操作化的软件的开发。(3)动态画面的设计,包括图形图象的调用。(4)交互操作的设计。(5)Internet的系统管理功能模块的设计,包括Web页面的动态设计、管理和交互操作设计等。(6)Intranet上的软件开发(直接面向企业内部用户的软件)。(7)与各类数据库连接查询的SQL语句实现。(8)网络通信与移动通信,网络集成方面。2.Java程序分为哪两类?各有什么特点?如何区分它们?Java语言程序分为两类:应用程序Application和小程序Applet,它们是利用Java语言生成的可运行代码中最常用的两种,两者都必须在课后答案网Java虚拟机上运行。Application更象我们平常用VB,VC等编写的桌面程序,多以控制台(CONSOLE)方式运行,当然也很容易实现窗口应用。Applet则需要嵌入Web页面中,在支持Java虚拟机的浏览器上运行。区分办法:应用程序www.hackshp.cnApplication中一定包括一个主方法main,而小程序Applet没有这个方法。3.简述Java程序的运行过程。一个Java源的运行需要经过三个步骤:(1)编辑源程序,产生.Java的源程序文件(2)运用Java虚拟机JVM将源文件编译为.class的字节码文件(3)根据程序的不同类型运行程序。对于应用程序直接调用运行命令执行字节码文件,而对于小程序Applet,需要先将字节码文件嵌入HTML文件,然后用浏览器软件打开HTML文件。4.什么是Java虚拟机?简述其工作机制。Java虚拟机(JavaVirtualMachine—JVM)是一种利用软件方法实现硬件功能的抽象化的计算机,它基于下层的操作系统和硬件平台,可以在上面执行Java的字节码程序。JVM是运行Java程序必不可少的机制,编译后的Java程序指令并不直接在硬件系统上CPU上执行,而是由JVM执行。JVM是编译后的Java程序和硬件系统之间的接口,程序员可以把JVM看成一个虚拟的处理器,它不仅解释执行编译后的khdaw.comJava指令,而且还要进行安全检查,它是Java程序能在多平台间进行无缝移植的可靠保证,同时也是Java程序的安全检验引擎。若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com1 5.Java编程工具有哪些?各有什么特点?Java编程工具主要包括8种:JDK,Jbuilder,Jcreator,JavaWorkshop,VisualAgeforJava,VisualCafeforJava,FreeJava,VJ++6.0。各种编程工具的特点参照教材内容。6.什么是JDK?它与J2SDJ2SDKJ2SDKJ2SDKK有什么关系?JDK:JavaDevelopmentKit—Java开发工具集,它运行在Windows中的MS-DOS窗口状态,用户需要在提示符下输入命令。JDK是一种免费资源,一般使用的是其标准版,即J2SDK:Java2StandardDevelopmentKit。khaw.com7.如果在DD:MyJavaFile:MyJavaFi:MyJavaFilele目录下有一个文件FirstJavaProgram.JavairstJavaPirstJavaProgram.Javarogram.Java,写出在JDK环境下,此程序的运行过程。运行过程:先切换到D:MyJavaFile目录,然后依次执行:(1)javacFirstJavaProgram.Java(2)javaFirstJavaProgram.class8.什么叫面向对象编程?什么是对象?什么是类?面向对象编程(Object-OrientedProgramming,OPP)是一套概念和想法,它与面向过程的编程方法相对应,是一种利用计算机程序来描述实际问题的思路,也是一种直观,效率更高的解决问题的方法。面向对象的程序设计方法按照现实世界的特点来管理复杂的事物,把课后答案网它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成一定的任务。对象就是变量和相关的方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为,一个对象的变量构成这个对象的核心,包围在它外面的方法使这个对象和其它对象分离开来。类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。在程www.hackshp.cn序设计语言中,类是一种数据类型,而对象是该类型的变量,变量名即是某个具体对象的标识名。二、操作题4.依照教材中的例题程序,自己分别编写一个ApplicationAppliApplicationcation和AppletAppleApplett,功能是输出信息:IloveJava!源程序如下:publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println("IloveJava!");}}5.定义一个类PersonPPersonerson,并分别设置若干成员变量和成员方法,并上机调试。publicclassPerson{khdaw.comcharname[];intage,no;若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com2 floatincome;voidspeak(){System.out.println("Iamdoingmyhomework!");}//endspeak()}//endclass第二章习题答案第二章习题答案第二章习题答案一、简答题khaw.com1.Java提供了哪些注释语句,功能有什么不同?Java语言提供了3种形式的注释:(1)//一行的注释内容以//开始,最后以回车结束,表示从//到本行结束的所有字符均作为注释内容(2)/*一行或多行的注释内容*/从/*到*/间的所有字符(可能包括几行内容)都作为注释内容。以上两种注释可用于程序的任何位置。(3)/**文档注释内容*/当这类注释出现在任何声明之前时将会作特殊处理,它们不能再用在代码的任何地方。这类注释意味着被括起来的正文部分,应该作为声明项目的描述,而被包含在自动产生的文档中。课后答案网2.识别下面标识符,哪些是合法的,哪些是非法的。Ply_1,$32,java,myMothod,While,your-list,class,ourFriendGroup_$110,长度,7stwww.hackshp.cn合法标识符:Ply_1,$32,java,myMothod,ourFriendGroup_$110,While不合法标识符:class(关键字),长度,7st3.Java提供了哪些数据类型,全部写出来。二、编程题//1.//1.编写程序,从10个数中求出最大值、最小值及平均值。khdaw.compublicclassXT00201{publicstaticvoidmain(Stringargs[]){若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com3 inti,s=0,min=Integer.MAX_VALUE,max=Integer.MIN_VALUE;floatave;inta[]=newint[10];for(i=0;i<2;i++){a[i]=(int)(100*Math.random());//取随机数if(maxa[i])min=a[i];s+=a[i];}System.out.println("最大值是:"+max);System.out.println("最小值是:"+min);khaw.comSystem.out.println("平均值是:"+s/10);}}//2//2、编程求n!,设n=8nn=8n=8。publicclassXT00202{publicstaticvoidmain(Stringargs[]){inti,n=8;课后答案网longs=1l;for(i=1;i<=n;i++)s*=i;System.out.println("8的阶乘是:"+s);}www.hackshp.cn}//3//3、编程,根据考试成绩的等级打印出分数段,优秀为90以上,良好为80~90,中等为70~70~7979,及格为60~6960~60~6969,60以下为不及格,要求采用sswitcswitchwitchh语句。publicclassXT00203{publicstaticvoidmain(Stringargs[]){inta[]={85,95,65,53,77,68,45,99,100};inti,l;for(i=0;i<=a.length;i++){l=a[i]/10;switch(l){case9:case10:System.out.println("成绩是:"+a[i]+":等级是khdaw.com"+"优秀");break;case8:若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com4 System.out.println("成绩是:"+a[i]+":等级是"+"良好");break;case7:System.out.println("成绩是:"+a[i]+":等级是"+"中等");break;case6:System.out.println("成绩是:"+a[i]+":等级是"+"及格");break;default:System.out.println("成绩是:"+a[i]+":等级是不及格");}//endswitch()khaw.com}//endfor}endmain()}//endclass//4//4、判断一个数是不是回文。回文是一种从前向后读和从后向前读都一样的文字或者数字,如12321、569878965、abcbaabcabcbaba。importjava.io.*;课后答案网publicclassXT00204{publicstaticvoidmain(Stringargs[])throwsIOException{inti=0,n=0;booleanflag=true;charch,a[]=newchar[20];www.hackshp.cnSystem.out.println("请输入字符串或者数字(最多20个):");ch=(char)System.in.read();while(ch!="n"){a[n]=ch;n+=1;ch=(char)System.in.read();}//注意n=a.length+1for(i=0;ia[j+1]){temp=a[j];khaw.coma[j]=a[j+1];a[j+1]=temp;}System.out.println("由小到大排序的结果是:");for(i=0;i"A"))System.out.print(ch[i]);System.out.println();for(i=0;i"a"))System.out.print(ch[i]);System.out.println();khdaw.com}//endmain()}//endclass若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com9 4.设定6个字符串,打印出以“a”字母开头的字符串。publicclassXT003204{publicstaticvoidmain(Stringagrs[]){inti;String[]s={"abc","dcb","fasdfas","asew","fery","dee"};for(i=0;i<6;i++)if(s[i].charAt(0)=="a")System.out.println(s[i]);}khaw.com}5.编写一个含有抽象方法和一个抽象类的程序。abstractclassObjectAccess{//抽象类intnum=0;Objectaccess[]=newObject[20];abstractvoidinputToArray(Objecto);//抽象方法1abstractObjectoutputFromArray();//抽象方法2}三、上机操作题课后答案网1.分别从网上下载两种格式的JDK帮助文档。2.运行下面的程序,输出并记录结果。classFather{privateintf1,f2;www.hackshp.cnpublicFather(intf1,intf2){this.f1=f1;this.f2=f2;}publicvoidprint(){System.out.println("f1="+f1+"f2="+f2);}}classChildextendsFather{privateintc1,c2;publicChild(intf1,intf2,intc1,intc2){super(f1,f2);this.c1=c1;this.c2=c2;}publicvoidprint(){super.print();khdaw.comSystem.out.println("c1="+c1+"c2="+c2);}若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com10 }//增加的测试代码publicclassXT003302{publicstaticvoidmain(String[]args){Childc=newChild(1,2,3,4);c.print();}}输出:f1=1f2=2khaw.comc1=3c2=43.打开JDK文档,找出类lonlonglongg的所有方法,并记录下来。4.编写一个程序,实现把数组中各个分量累加起来的功能,并上机调试。publicclassXT003304{publicstaticvoidmain(String[]args){int[]a={3,543,6,23,56,88};inti,sum=0;for(i=0;iOptionsOptionOptions课后答案网s->JDKJDKToolsToolToolsToolss//然后在selectselecselectselectTool(tTool(Tool(下拉列表)里选择RunRunApplicationAppliApplicationcation,//单击下面的Default,DefaulDefault,t,单击EditEdEditit按钮//在弹出的窗口里选ParametersParametParametersers,勾选PromptPPromptforromptforformainmaimainmainmethodnmethodmmethodargumeethodargumearguargumeme,//OK就可以了,//然后执行运行时会跳出一个对话框,需要在里面输入,www.hackshp.cn//现在输入的就是args,要输入多个就以空格隔开2.编写一个程序,用于将来自用户的两个数字接受为命令行参数。将第一个数字除以第二次数字并显示结果。代码应当处理引发的异常,即在输入的参数数量不是两个或用户输入0作为参数时引发异常。classXT008202{publicstaticvoidmain(Stringargs[]){intx,y,z;try{x=Integer.parseInt(args[0]);y=Integer.parseInt(args[1]);z=x/y;System.out.println(x+"/"+y+"="+z);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("输入的参数数量不是两个khdaw.com");}catch(ArithmeticExceptione){若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com30 System.out.println("第二个参数不能为零");}finally{System.out.println("程序运行结束");}}}3.编写一个程序,说明在一个catchcatcatchch处理程序中引发一个异常时会发生什么情况。publicclassXT008203{publicstaticvoidmain(Stringargs[]){khaw.comtry{thrownewNullPointerException("空指针异常");}catch(NullPointerExceptione){System.out.println("捕捉第一次产生的空指针异常");thrownewArithmeticException("数学异常");}finally{System.out.println("程序正常执行完毕!");}课后答案网}}当在异常处理程序中引发了异常时,该异常应由原try块的外层程序来处理,如果没有捕获处理,异常将向上级传递。www.hackshp.cn4.编写一个可演示用户自定义异常用法的程序,该程序接受用户输入的学生人数,当输入一个负数时,认为是非法的。用户自定义异常捕获此错误。importjava.io.*;classXT008204{publicstaticvoidmain(Stringargs[]){Strings="";intt;while(true){try{System.out.print("请输入学生人数:");BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));s=in.readLine();t=Integer.parseInt(s);khdaw.comif(t<0)thrownewNegException("人数不能为负数!");若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com31 System.out.println("你输入的人数是:"+t);break;}//endtrycatch(IOExceptione){System.out.println(e);}catch(NegExceptione){System.out.println(e);}}//endwhile}//endmain()}//endclassclassNegExceptionextendsException{publicNegException(Stringmessage){khaw.comsuper(message);}}第9章习题解答章习题解答章习题解答一、简答题1.什么叫流?对流的分类通常有几种方式?答:流是指一组有顺序的、有起点和终点的字节结合。课后答案网流的分类方式有多种:�根据数据流动的方向,可分为输入流和输出流。输入流:只能从中读取数据,而不能向其写出数据输出流:只能向其写出数据,而不能从中读取数据www.hackshp.cn�根据处理数据的单位划分,可分为字符流和字节流字节流:以字节为单位进行数据传输,每次传送一个或多个字节字符流:以Unicode字符为单位进行数据传输,每次传送一个或多个字符�根据数据流所关联的是数据源还是其他数据流,可分为节点流和处理流节点流:直接从指定的位置(如磁盘文件或内存区域)读或写处理流:对一个巳存在的流的连接和封装,通过对所封装的流的功能调用实现数据的读/写功能,处理流并不直接连接到数据流。2.Java的所有I/OI/O流都是四个抽象类的子类,这四个抽象类是什么?答:�InputStream:是所有字节输入流的父类�OutputStream:是所有字节输出流的父类�Reader:是所有输入字符流的父类�Writer:是所有输出字符流的父类�3.写出下面这些输入输出流类的输入输出操作的特点。khdaw.com(1)InputStream和OutputStream(2)DataInputStream和DataOutputStream(3)FileInputStream和FileOutputStream若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com32 (4)PrintStream(5)RandomAccessFile答:(1)一个字节一个字节地输入输出数据(2)按照不同的数据类型输入输出数据(3)一个字节一个字节地输入输出数据(4)把数据转化成字符串输出(5)能够随机访问普通文件4.FileFiFilele类的作用是什么?答:File类是I/O包中唯一能够代表磁盘文件本身的对象,使用File类,我们可以方便khaw.com地建立与某磁盘文件的连接。一个对应着某磁盘文件或目录的File对象一经创建,我们就可以通过调用它的方法来获得该文件或目录的属性,File类中还定义了一些对文件或目录进行管理、操作的方法,利用这些方法可以完成对文件和目录的建立、删除、查询、重命名等操作。5.Java语言是否可以读入和写出文本格式的文件?如果可以,使用的类是什么?答:可以。使用的类是FileReader和FileWriter6.流文件读入和写出的操作过程有哪些?课后答案网答:流文件读入和写出的操作过程如下:(1)利用文件名字符串或File对象创建输入输出流对象以创建FileInputStream为例,它有两个常用的构造函数:FileInputStream(StringFileName):利用文件名(包括路径名)字符串创建从该文件读入数据的输入流www.hackshp.cnFileInputStream(Filef):利用巳存在的File对象创建从该对象对应的磁盘文件中读入数据的输入流注意:在创建文件输入或输出流时可能因给出的文件名不对,或路径不对,或文件的属性不对不能进行读写而造成错误,此时系统会抛出异常FileNotFoundException,所以创建文件输入输出流并调用构造函数的语句应该被包括在try块中,并有相应的catch块来处理它们可能产生的异常。(2)从文件输入输出流中读写数据从文件输入输出流中读写数据有两种方式:一是直接利用FileInputStream和FileOutputStream自身的读写功能;另一种是以FileInputStream和FileOutputStream为原始数据源,再套接上其他功能较强大的输入输出流完成文件的读写操作。二、编程题1.设计一个程序,可以接受用户从键盘输入的多个字符,换行表示字符输入结束。输入完后将其显示在屏幕上。参考代码如下:khdaw.comimportjava.io.*;若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com33 publicclassXT009201{publicstaticvoidmain(Stringargs[]){Strings="";System.out.print("请输入一个字符串:");try{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));s=in.readLine();}catch(IOExceptione){khaw.comSystem.out.println(e);}System.out.println("你输入的字符串是:"+s);}}2.编写程序,实现当用户输入的文件名不存在时,可以重新输入,直到输入一个正确的文件名后,打开这个文件并将文件的内容输出到屏幕上的功能。参考代码如下:课后答案网importjava.io.*;publicclassXT009202{publicstaticvoidmain(Stringargs[]){Stringstr;www.hackshp.cnFilesourceFile;BufferedReadersource;while(true){try{InputStreamReaderdin=newInputStreamReader(System.in);BufferedReaderin=newBufferedReader(din);System.out.print("请输入文件路径及文件名:");sourceFile=newFile(in.readLine());source=newBufferedReader(newFileReader(sourceFile));while((str=source.readLine())!=null){System.out.println(str);}din.close();in.close();break;}khdaw.comcatch(IOExceptione){System.out.println("I/O错误!重新输入文径路径及文件名");若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com34 }}//endwhile}}3.编写程序,将程序文件的源代码复制到程序文件所在目录下的“temp.temp.txttxt”文件中。程序参考代码如下:importjava.io.*;publicclassXT009203{publicstaticvoidmain(Stringargs[]){khaw.comtry{FileInputStreamfis=newFileInputStream("XT009203.java");FileOutputStreamfos=newFileOutputStream("temp.txt");intread=fis.read();while(read!=-1){fos.write(read);read=fis.read();}fis.close();fos.close();课后答案网}catch(IOExceptione){System.out.println(e);}www.hackshp.cn}}4.编写代码,通过“文件”菜单项打开一个本地机的文件,把其内容显示在文本区中,经过修改后再利用“文件”菜单的“保存”菜单项把修改后的内容保存回磁盘中原来的文本里。答:略第10章习题解答章习章习题解答章习题解答一、简答题1.什么叫线程?什么叫多线程?答:线程是一个程序内部的一条执行线路,一个比进程更小的能独立运行的基本单位。多线程是指一个程序中同时存在着好几个执行体,它们按几条不同的执行线路共同工作,独khdaw.com立完成各自的功能而互不干扰2.进程和线程的区别是什么?若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com35 答:它们的区别在于:�进程是程序的一次动态执行过程,它对应了从代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线路。每条线路,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。�每个进程都有独立的代码和数据空间,进程间切换的开销大;而同一类线程可以共享代码和数据空间,但每个线程有独立的运行栈和程序计数器,线程切换的开销小。3.简述线程的生命周期。khaw.com答:新建的线程在它完整的生命周期中,包括新建、就绪、运行、阻塞和死亡5种状态。(1)新建(new)状态,用new命令建立一个线程后,还没有启动其指定的指令序列,这时的线程状态就是新建状态。(2)就绪(Runnable)状态,也叫做可运行状态,处于新建状态的线程被启动后即进入了本状态。这时线程正在等待分配CPU资源,一旦获得CPU资源即进入了自动运行状态。(3)运行(running)状态,线程获得了CPU资源正在线程的指令,此时除非它自动放弃CPU资源或者有更加高优先级的线程进入,否则线程将一直运行到结束。(4)阻塞(blocked)状态,由于某种原因致使正在运行的线程让出CPU资源暂停自己的执行,即进入阻塞状态,这时只有引起线程堵塞的原因被消除后才能使本线程回到就绪课后答案网状态。(5)死亡(dead)状态,处于死亡状态的线程不具备继续运行的能力,死亡的原因有两个:一个是正常的线程完成了它的全部任务后退出,另一种是线程被强制中止,如调用stop()或destroy()方法让线程消亡。此时线程不可能再进入就绪状态等待执行。www.hackshp.cn4.在Java语言中创建线程有几种方式?它们有何区别?答:在Java语言中创建线程有两种方式:一种是创建Thread类的子类,另一种是实现Runnable接口,两种创建方式的区别在于:�直接继承Thread类创建线程时,Thread子类无法再从其他类继承。�使用Runnable接口创建线程时可以将代码和数据分开,形成清晰的模型。线程体run()方法所在的类还可以从其他类继承一些有用的属性或方法,并有利于保持程序风格的一致性。5.Java线程的优先级设置遵循什么原则?答:Java线程的优先级设置遵从下述原则:(1)线程创建时,子线程继承父线程的优先级(2)线程创建后,可在程序中通过调用setPriority()方法改变线程的优先级(3)线程的优先级是1~10之间的正整数,数字越大优先级越高,默认的优先级是居中,即为5。6.举例说明什么叫线程的同步?Java中如何实现线程的同步?khdaw.com答:当在一个程序中使用两个或多个线程时,可能会发生多个线程同时要访问同一资源的情况。例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com36 中修改数据。在这种情况下,数据可能会变得不一致。我们需要做的是允许一个线程彻底完成其任务后,再允许下一个线程执行。必须保证一个共享的资源一次只被一个线程使用。实现此目的的过程称为“同步”。可以用两种方法实现同步:�同步方法:通过在方法声明中加入synchronized关键字可以声明要同步方法�同步块:通过synchronized关键字将一个程序块声明为同步代码块二、编程题1.编写一个程序,通过继承ThreadTThreadhread创建线程并以此生成两个线程,每个线程输出从1到5的数。khaw.com//参考答案1publicclassXT010201extendsThread{publicstaticvoidmain(Stringargs[]){newXT010201();}publicXT010201(){Threadt1=newThread(this);t1.setName("线程1");Threadt2=newThread(this);t2.setName("线程课后答案网2");t1.start();t2.start();}publicvoidrun(){//System.out.println(Thread.currentThread().getName());www.hackshp.cnfor(inti=1;i<=100;i++){System.out.println(Thread.currentThread().getName()+""+i);}}}//参考答案2classMyThreadextendsThread{publicMyThread(Stringname){this.setName(name);}publicvoidrun(){for(inti=1;i<=100;i++){System.out.println(Thread.currentThread().getName()+i);}khdaw.com}}若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com37 publicclassXT010201{publicstaticvoidmain(Stringargs[]){MyThreadt1=newMyThread("线程1");MyThreadt2=newMyThread("线程2");t1.start();t2.start();}}2.创建一个名称为MyappletMyappleMyapplett的AppletAppleApplett,通过实现RunnableRunnabRunnablele接口为其提供多线程的功khaw.com能。在AppletAppleApplett中输出从1到20的数字,且每个数字间延迟300毫秒。importjava.awt.*;importjava.applet.*;publicclassXT010202extendsAppletimplementsRunnable{inti;Threadt;publicvoidinit()课后答案网{t=newThread(this);t.start();}publicvoidrun()www.hackshp.cn{for(i=1;i<=20;i++){try{repaint();Thread.sleep(300);}catch(InterruptedExceptione){System.out.println(e);}}}publicvoidpaint(Graphicsg){g.drawString("i等于"+i,30,30);}}khdaw.com若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com38 一个具有多线程能力的Applet小程序3.编写程序,通过多线程实现电子实钟的功能。程序的运行结果如图10-6所示。khaw.com图10-6importjava.awt.*;importjava.util.Calendar;publicclassXT0102031课后答案网{publicstaticvoidmain(Stringargs[]){Labell=newLabel();Framef=newFrame("电子时钟");f.add(l);f.setSize(150,100);www.hackshp.cnf.setVisible(true);newSetTime(l).start();while(true){}}//endmain()}//endclassclassSetTimeextendsThread{Stringhour,minute,second;Labell;SetTime(Labell){this.l=l;}publicvoidrun(){khdaw.comwhile(true){Calendarc=Calendar.getInstance();若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com39 if(c.get(Calendar.HOUR_OF_DAY)<10)hour="0"+c.get(Calendar.HOUR_OF_DAY);elsehour=""+c.get(Calendar.HOUR_OF_DAY);if(Calendar.MINUTE<10)minute="0"+c.get(Calendar.MINUTE);elseminute=""+c.get(Calendar.MINUTE);if(c.get(Calendar.SECOND)<10)second="0"+c.get(Calendar.SECOND);elsekhaw.comsecond=""+c.get(Calendar.SECOND);l.setText(hour+":"+minute+":"+second);try{Thread.sleep(1000);}catch(InterruptedExceptione){}}//endwhile}}4.编写一个创建三个线程对象的程序。每个线程应该输出一则消息,并且消息后紧课后答案网跟字符串“消息结束”。要求:在线程输出消息后,暂停一秒钟后才输出“消息结束”。输出结果如图10-7所示。www.hackshp.cnpublicclassXT010204{publicstaticvoidmain(Stringargs[]){khdaw.comPrintMessagePM=newPrintMessage();Threadt1=newThread(PM);若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com40 Threadt2=newThread(PM);Threadt3=newThread(PM);t1.setName("这是消息1");t2.setName("这是消息2");t3.setName("这是消息3");t1.start();t2.start();t3.start();}}khaw.comclassPrintMessageimplementsRunnable{Stringmsg="";publicsynchronizedvoidrun(){System.out.println(Thread.currentThread().getName());try{Thread.sleep(1000);}catch(InterruptedExceptione){}System.out.println("消息结束");}课后答案网}//修改书上例题10-410-10-44//////用同步方法实现publicclassThreadSyncDemo1{www.hackshp.cnpublicstaticvoidmain(String[]args){ThreadTest1t=newThreadTest1();newThread(t,"售票窗口1").start();//本线程调用同步代码块newThread(t,"售票窗口2").start();//本线程调用同步函数}}classThreadTest1implementsRunnable{privateinttickets=100;publicvoidrun(){while(true){sale();}}khdaw.compublicsynchronizedvoidsale(){if(tickets>0){若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com41 try{Thread.sleep(10);}catch(Exceptione){System.out.println(e.getMessage());}System.out.println(Thread.currentThread().getName()+"正在卖第"+tickets--+"号票");}}}//endclassThreadTest1khaw.com//修改书上例题10-410-10-44//////用同步代码块实现publicclassThreadSyncDemo2{publicstaticvoidmain(String[]args){ThreadTest2t=newThreadTest2();newThread(t,"售票窗口1").start();newThread(t,"售票窗口2").start();}}课后答案网classThreadTest2implementsRunnable{privateinttickets=100;publicvoidrun(){www.hackshp.cnwhile(true){sale();}}publicvoidsale(){synchronized(this){if(tickets>0){System.out.println(Thread.currentThread().getName()+"正在卖第"+tickets+"号票");try{Thread.sleep(10);}catch(Exceptione){System.out.println(e.getMessage());}tickets--;}khdaw.com}//synchronized}若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com42 }//endclassThreadTest2khaw.com课后答案网www.hackshp.cnkhdaw.com若侵犯了您的版权利益,敬请来信通知我们!℡www.khdaw.com43'

您可能关注的文档