Java程序设计案例教程-课后习题答案.docx
第1章Java开发入门一.埴空题1 .面向时象,SUN2 .JavaSE.JavaEE.JavaME3 .面向对望、於平台性、支持多线程4 .JDK5 .bin目录二.选择I.C2.ABCD3.D4.D5.B三.荷答1.pa1.h环境变曳是系统环境变量中的一种,它用于保存一系列可执行文件的路径,姆个路径之间以分号分聃.当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在pah环境变JN中定义的路径下去寻找这个文件,如果仍未找到,系统会报错。2.Java程序运行时,必须经过漏洋和运行两个步雁。首先将后级名为.java的源文件进行编译生成后缀名为.c1.ass的字炉码文件.然后Java虚拟机符字节眄文件进行解择执行.并将结果显示出来.四.编程He1.1.oWork1.Javapub1.icc1.assHe1.1.oWor1.dpub1.icstaticvoidmain(Stingargs>System.ouJprint1.n(这处第个Java程F?!);第2章Java编程基础填空超1 .c1.ass2 .单行注释、多行注柞、文档注林3 .基本数据、引用数据4 .&,&&、.H5 .容器、O6 .47 .强制8.129 .小写二.判断1.错2.裕3.对4.对5.时6.)H7.对三.选择1 .D2.B3.C4.A5.C6.D7.A8.B9.A四.筒答1.Java语言的八种基本数据类型有:byte字节型,占一个字节shot短整型,占两个字节.int整型,占4个字节.1.ong长整型,占8个字节111oat单精度浮点型,占4个字节.doub1.e双精度浮点型,占8个字节.char字符型,占两个字节.boo1.ean,表示逻辑值.有rue和fa1.se两个俯,分别占一个字节。2 .在switch条件语句和砧环语句中部"以使用break语句。当它出现在switch条件语句中时,作用是终止某个CaSC并跳出SWitCh结构.当它出现在循环语句中,作用是跳出循环语句,执行很环后面的代码:coming语句用在循环语句中,它的作用是终止本次循环,执行下一次循环,3 .&和&&都UJ以用作遗辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为InJC时,整个运算结果才为true.否则,只要有一方为fa1.se.则结果为包sc.当运曾符“&“和“&&'的右边为表达式时,使用“&''进行运算,不论左边为true或拧fa1.x,右边的表达式都会进行运算。如果使用“&&”进行运豫,力左边为fa1.se时,右边的表达式期不会进行运修,因此“&&”被称作用路与.五.娘程1 .参考答案pub1.icc1.assgetSum<pub1.icstaticvoidrin<String()args1.(intsum-0;for(inti-100;1<-300;工1)(if(i%2-0)sum+=i;JSystem.out.printin(sum);2 .参考答案pub1.icc1.assExamp1.e28(pub1.icstaticvoidman<Str1.ng(Jargs)int(art-(22.24.76.12.21.33);intmin-getMin(arr);System.out.printIn<Mmin=M+min);)staticintgetMin(intJart)intmin-art0;for1.int×=1;x<arr.1.ength;x+>Iif(arr(×1<miniImin-arr(×I;)returnm1.n;3 .参考答窠importjava.uti1.Scanner;pub1.icc1.assExamp1.e(pub1.icstaticvoidmain(String()args)<Scannersc-r÷uscanner!System,n;mtarbrc;System.0t.print1.n(iiift5条边");asc.ne×t1.nt<I;System.ot.print1.n("irYiJ?¾*;二条或:,'1.;b-sc.next1.nt<1.;System.out.printIn(iij*Ay:Jfi,);c-sc.nextInt<);if(a+b>c4b4-c>a44a+c>b)Iif(a-b44a-c)System,out.printin(,DBw);e1.seif(a=b11b=c11a=c)(System.out.printin(mDYm);e1.seif(a*a÷b*b-c*c)(bb÷c*c-a*a)a*a÷c*cwb*b)(System.out.printinmZJ,);e1.se!System.out.printInImYBmI;i)e1.se(Syst.o.r.pri11t1.nSy83mo次pnint1.n无号的构造方法被M短了.”pub1.icc1.assTestO1.pub1.icstaticvoidra1.n<Stringarg8>(Personp-newPerson();)StudentJavapub1.icc1.assStudent<privateStringsNo;2 privateStringsNa«e;3 privateString三Se×4 privateintsAge;5 privateInt8Java;6 /getter&setter方法pub1.icStringgctsNo()8 returnsNo;9 10 pub1.icvoidsetsNo(StringSNO)(11 this.sNo三sNo;12 i13 pub1.icStringgetsName<>I14 returnsName;15 16 pub1.icvoidstsN<rf(StringSNam)(17 thia.sName-sName;18 %19 pub1.icStringgctsSe×()(20 returnsS×21 122 pub1.icvoidaetsSe×(StringsSe×)23 this.sSe׫sSe×24 )25 pub1.icIntgetsAge()(26 returnsAge;27 ,28 pub1.icvoidSetsAgeIintsAg>(29 thia.SAge-3Age;30 131 pub1.icintgetsJava>32 returnsJava;第4章面向对象(下)一、填空也1. I2. ,写3. fina1.4. instacof5. Imp1.ements6. 编译时异常7. Run1.iiiicExccption8. 逗号二、判断超1 .对2 .对3 .tft4 .对5 .错6 .对7 .对8 .错9 .对10 .精三、选择感1. B2. D3. D4. D5. B6. D7. C10. D11. C四、筒答他1.抽象类和接口有如下区别:1)抽象类可以有构造方法,接口中不能有构造方法。2)抽象类中可以有普通成员变量,接口中没有普通成员变量,3)抽象类中可以包含非抽取的普通方法.接口中的所有方法必须都是抽象的不能有北抽象的普通方法.4)抽象类中的抽象方法的访问类型可以是pub1.ic,protected和(默认类里),但接口中的抽象方法只能是pub1.ic类中的.并且默认即为pub1.icabstract类鞭.5)抽象类中可以包含静态方法,接口中不能包含好态方法.pub1.icc1.assTestAniifta1.ipub1.icstaticvoidmain(String()args)Anima1.bird=newBird("WtF,'rr'-I;bird.showinfo();bird.move(>bird.eat();Emp1.oyeejava72 abstractc1.assE1.nip1.oyee(73 privateStringname;定义姓名namg并私有化属性74 privateIntmonth;定义生H月份JrQnth并也“化隔性75 pub1.icEmp1.oyees11无参构造器76 pub1.icEmp1.oyee<Stringna11fintmnth>仃殄构造方法77 this.name=nor;给属性ndms初始化18this.month-month;蛤胧性onth初始化1K79BO/获取*件namu的方法B1.pub1.icStringgetNa11>(1.(82returnname;返回nameA性831B<3获取,*性month的方法85 pub1.icintgetMonth()I86 returnmonth;jfi回month.M性87 )88 蛤税性name乐初始ft89 pub1.icvoidstNar(Stringname)I90 this.name-na11>e;本类中的属性name91 )92 蛤焦性11o11th赋初始值93 pub1.icvoidsetMonth(int11>nth1.(94 this.11>onth-month;本类中的阳性month95 )96/创世getSaIdry()方法计算工费.参数gnt:h是月份如果当月是J工生日.奖励100元9?pub1.icdoub1.egetSa1.ary1.intmonthI(98doub1.esa1.ary-0;定义工资变Ift99别新当前月份是否是员工的生日月份,如果是奖励100元100ifthis.11th-month)(101sa1.ary=sa1.ary100;102returnsa1.ary;iS回工资sa1.arySaIariedEmpIoyeejavac1.assSa1.ar1.edEmp1.oyeeextendsEmp1.oyee(privatedoub1.emonthSa1.ary;/W5monthSa1.aryWfkpub1.icSa1.ariedEmp1.oyee(><无咎构造方法在卷构造方法呈Ift姓幺生日月份月薪pub1.icSa1.ar1.edEff1.p1.oyee(Stringnarrrintmonthsdoub1.emonthSa1.ary>(super(na11z*rmonth);西用父类fi参构造方法this.monthSa1.ary-WnthSa1.ary;为属性monthsa1.ary初始化微值J获取monthSa1.ary的价pub1.icdoub1.egetMonthSa1.aryI>returnmonthsa1.ary;)/11>onthSa1.aryHpub1.icvoidSetMonthSa1.ary(doub1.emonthSa1.ary)this.r>onthSa1.ary=monthSa1.ary;1用龙父类中的方法pub1.icdoub1.egetSa1.ary(intmonthI(定义工货变Stdoub1.esa1.ary-JonthSa1.ary*super.getSa1.ary(month);returnsa1.ary;)HourIyEmpIoyeejavac1.assHour1.yETOp1.oyeeextendsEmp1.oyeeprivatedoub1.ehour1.ySa1.ary;定义性hour1.ySn1.dry用小时的T:费privateinthours;定义属性hours每月工作的小时数pub1.icHour1.yEJTp1.oyee(J(J无容构造方法有参构造方法参政姓名生日月份斛小时的工资饵月工作的小时数PUb1.iUHour1.yE1.xrp1.oyee(Stringname,intmo11thrdoub1.ehour1.ySa1.ary/inthours)<super(na11ermonth);1.H用父类有畚构造方法this.hour1.ySa1.ary-hour1.ySa1.ary;/,为1.性hour1.ySa1.ary初始化(ffthis.hours-hours;为属性hours初始化Wfi)pub1.icdoub1.egetHour1.ySa1.ary<1获取hour1.ySa1.ary的4ftreturnhour1.ySa1.ary;)103104105106107108109110111112113114115116117118119120121122123124125126127123129130131132133134135136137138139140141142pub1.icintgetHoursO我取hours的价186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218185pub1.icdoub1.egetsa1.ary(intmonth)returnthis.getSa1.es(>*<1.÷this.getRate()>¼super.getSa1.ary(month);BaseP1.usSa1.esEmp1.oyee.javac1.assBa三eP1.u三Sa1.esEmp1.oyeeextendsSa1.esEmp1.oyec(privatedoub1.ebaseSa1.ary;定义基砒工货baseSd1.ary无卷构造方法pub1.icBaseP1.usSa1.esEmp1.oyee()有参构造方法PUbIiCBaseP1.sSa1.5E11p1.oy<Strngintmonthsdoub1.esaIesrdoub1.eratezdoub1.ebaseSa1.aryJ(super(name,month.sa1.eszrate);this.baseSa1.ary-ba三eSa1.ary;)/get/set方法而私有阳性的训用和设置pub1.icdoub1.egatBaaeSa1.ary()(returnba三eSa1.ary;)pub1.icvoidSetBaaeSa1.aryO(this.baseSaiary-baseSa1.ary;Jpub1.icdoub1.egetSa1.ary1.intmonthI(returnbaseSa1.ary*sper.getSa1.ary!month);TestJava定义个测试类pub1.icc1.assTeat(pub1.icstaticvoidmain(String(args>/小明一个EMIoySe类型的散爆并创建不同子类型的对象Emp1.oyee;emp1.oyee-newSa1.ariedEmp1.oyeeC"4K1mr1/6000)rnewHour1.yEmp1.oyee("李I11m,2,50z180),newSa1.esEmp1.oyee("王't3r650Or0.15)fnewBaseP1.usSa1.csEmp1.oyee(J六”,4,5000,0,75,2000);打印郎个员工的工资for(1.nti-0;i<emp1.oyee.1.ength;IJ)System.out.prin,n.round(emp1.oyee(i.getSa1.ary(10)I;第5章JavaAPI-.填空!.StringStringBufIcr2 .Ieng(h()3 .Ma1.h.abs():4 .随机产生数字5 .StringStringBufIcr和StringBui1.der5.1.Ong字段标准Java计算时代<就是1970年I月Ir1.开始)纳秒数二.判断2.fft3.错4.对三.选择I.B2.C3.A4.A5.A四.简答1 .String类表示的字符热是常金,一旦创建后,内容和长度都是无法改变的而StringBuffer表示字符容器,其内容和长度可以改!时修改.在操作字符小时,如果该字符巾仅用于表示数据类型,则使用String类即可,但是如果需要对字符申中的字符iS行增副操作,则使用StringBUffer类。String类覆盖了Object类的equa1.s。方法,而StringBUffer类没有用iObject类的equa1.s。方法.String类对象可以用操作符进行连接.而StringBuffer类对望之间不能.2 .包装类和艇本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的假转为引用数据类鞭,反之,拆箱是指将引用数据类型的对象转为基本数据类型.五.编程1 .一考答案importjava.uti;.Random;pub1.icc1.assTeatO1.pub1.icstaticvoid11air<Stringargs>(Random1.nCWRandom();准舟小氏懂为5的维取好1.nt()arr-newInt(b);for(inti-0;Karr.1.ength;14)art(i)T;)mtindex-0;whi1.e(1.ndex<5)(inta=r.nextInt(100)+1;ifCcontains(arr/a)arrindex-t*)-a;)for(inti三arr(Systen.out.printIn(i>pub1.icstaticboo1.eancontains(intarrrintkey>forinti<arr.1.ength;i÷÷)if(arri1.=三key)(returntrue;)returnfa1.se;2 .卷考答案importjava.ti!.Scanner;pub1.icc1.assTest02(pub1.icstaticvoidmin<Stringargs>(Scannersc=11mScanner(System.?n;Sys19m.r.prin11n("iYfc;u:");Stringstr-sc.next<I;/字管申转成chatttS1.char()ch-str.toCharArray();StringBufferbuffer=newStringBuffer);for<1.nt1-8tr.1.ength<1.-1;1>-0;i->(if(chi>-,A,&&chi<-,Z)buffer.append(String.v3iucf(ch(i).to1.owcrCarcf)>e1.seif(chi)>=,a,&&chi)<=,z,>Ibuffer.apendString.va1.uef(ch(i).toUerCaseO>;)System.o7t.printin(buffer.toString();第6章集合类填空I.Co1.1.ection2 .hashNext()next()3 .Arniy1.Kh1.inkcd1.ist.HashSeUTnXSCII尿IiM叩、TreeMap4 .KeyXVa1.ue5 .数组二.判断1.W2.对3.ffi4,对5.对三选择1.BC2.B3.ABCD4.D5.B6.C四.简答1 .1.ist的特点是元素有序、可重更.1.ist接口的主要实现类有Array1.ist和1.mkcd1.ist.SCI的特点是元素无序、不可重打.SC1.接口的主要实现类有HaSSei和TrCCSbM叩的特点是存储的元索是愉Key)、值(VaI1.>e)映射关系,元素都是成对出现的OM叩接口的主要实现类有HiishMap和TrceMapt2 .内于Arruy1.kt集合的底层是使用一个数组求保存元索.在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大限的增删操作.但这种数组的结构允许程序通过索引的方式来访问元素,因此使用Array1.iW集合杳找元素很便捷。五.编程1.参考答案1 importJava-Uti1.2 c1.assTeacher(3 privateintage;4 privateStringname;5 pub1.icTeacherdntage.Stringname)(6 this.age»age;7 this.neime=name;8 9 pub1.icStringtoString()10 returnagew:11÷name;11 I12 pub1.icintashCode<1.13 returnname.hasCode<>age;U15 pub1.icboo1.eanequa1.s!Objectobj)(16 if(this-obj)17 returntrue;if(!(ob)InstanceofTeacher)>returnfa1.se;Teacherstu-(Teacher)obj;returnthis.name.equa1.s<stu.name>&&this.age=st.age;I)pub1.icc1.assTestpub1.icstaticvoidmain(String)args)(HaahSet<Teacher>hs-newHashSet<Teacher><I;hs.add(newTeacher<18rnZhangsanw);h三.add(newTeacher<20r',1.isa*>);hs.cJdd(newTeacher<20r'1.isaw>);System.out.print1.n<hs>181920212223242526272829303132第7章多线程填空1. ThrciidRunnab1.c2. 新建状态(New).就绪状态(RimnabIe)、运行状态(Running)3. start。、nm()方法4. SICCpo5. synchronized二.判断I,错2.锚3.对4.对5.对6.tf1.7.锚8.对三.选择I.C2.B3.C4.C5.D6.BC7.C四.简答1.一种是继承javaJang包卜的ThrEd类,现与ThnIad类的run。方法,在run()方法中实现运行在线程上的代码.1 newThreadO(2 pub1.icvoidrun()3 ).startI;另一种就是实现java.1.ang.Runnab1.e接11,同样是在run。方法中实现运行在线程上的代码.4 c1.assMyThreadimp1.ementsRunnab1.e1.5 pub1.icvoidrun<><I6 )2同步代码块的作用是控制税程,保证同步代码块中只能有一个线程在运行,保证了多战程操作数据的安全性,五.编程1 .参考答案c1.assMyRunner1.mp1.erentsRunnab1.e(privet11String二:r-"-c>1.c:i;<:1mnor<i,vw×yz"CharHch=str.toCharArrayI):Objectobj-newObjectd;privateint1-0;Q0vrridepub1.icvoidrun(>(whi1.e(true)ISynchron1.zed(Obj)Iifi>>26)break;System,out.rint1.n(Thread,currentTread().getName()4-:,*ciJ);i*f)try1Thread.ee(100);Fcatch(InterruptedExceptione)e.Pr1.ntStackTrace();pub1.icc1.assTestO1.(pub1.icstaticvoidmain<String)arqs>(HyRunnerr=newMyRunner<I;Threadt1.-!i÷whread<rz:");ThreadC2-newThread<rz.:");t1.start();t2.start();2 .参考答案pub1.icc1.assTeatO1.(pub1.icstaticvoidmain(String!arge>(Teachert-newTeacher<newThreHd(t,陈老师”.start1;newThread(t/-高老师P.startI;newThread(t/李老帅"ac();)c1.assTeacher1.mp1.ejrntsRunnab1.eprivateintnotes-50;pub1.icvoidrun<>whi1.e<tre1.IdiapatChNotes();if(notes<-0)(break;privatesynchronizedvoiddi三patchNote三(>(if(notes>0>(tryThread.31eep(10>/经过的我科休眠工。名秒)catch(InterruptedExceptione>(e.PrintStackTraceO;26System.out.rInt1.nThread.CurtentThreadO.getName(>”发出的平2345618910111213141516171819202122232425*notes一);262930第8章JDBC一、填空也1. java.s1.DrivcrManagcr2. c1.asspath3. update4. 微编译5. I二、判断题1 .错2 .福3 .对4 .错5 .错三、选择题1. A2. D3. A4.B4. B6 .C7 .AC8 .A9 .ABCD四、简答题1 .参考答案:(1)加我并注册数据库驱动:(2)通过DrNerManagCr抉取数据.库连接:(3)通过Connection对象获取Statement对象;(4)使用StaIemen1.执行SQ1.语句:(5)操作ResuhsCt结果案:(6)回收数据库费海.2 .参考答案PreParedSIatemCn1.接口继承自SIaIemCn1.接I1.它具有Su1.IemenI接口的所有方法,同时也潦加了一些新方法.其区别主要有一下两点:I>PrcParedStatement接口包含已编译的SQ1.语句,而StatemCnt接口没有.2)PRParedSUUe1.nen【接口中的SQ1.语句可包含若干个卷数,也可用"?”占位符,而Statenient没仇