Java語言程序的設(shè)計(鄭莉)課后習(xí)題答案_第1頁
Java語言程序的設(shè)計(鄭莉)課后習(xí)題答案_第2頁
Java語言程序的設(shè)計(鄭莉)課后習(xí)題答案_第3頁
Java語言程序的設(shè)計(鄭莉)課后習(xí)題答案_第4頁
Java語言程序的設(shè)計(鄭莉)課后習(xí)題答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

..Java語言程序設(shè)計<鄭莉>第二章習(xí)題答案1.什么是對象、類,它們之間的聯(lián)系?答:1對象是包含現(xiàn)實世界物體特征的抽象實體,它反映系統(tǒng)為之保存信息和與它交互的能力。對象是一些屬性及服務(wù)的封裝體,在程序設(shè)計領(lǐng)域,可以用"對象=數(shù)據(jù)+作用于這些數(shù)據(jù)上的操作"來表示。現(xiàn)實生活中對象是指客觀世界的實體;在程序中對象是指一組變量和相關(guān)方法的集合。2類是既有相同操作功能和相同的數(shù)據(jù)格式的對象的集合與抽象!兩者的關(guān)系:對象是類的具體實例.。2.什么是面向?qū)ο蟮某绦蛟O(shè)計方法?它有那些基本特征?答:面向?qū)ο蟪绦蛟O(shè)計從所處理的數(shù)據(jù)入手,以數(shù)據(jù)為中心而不是以服務(wù)為中心來描述系統(tǒng)。它把編程問題視為一個數(shù)據(jù)集合,數(shù)據(jù)相對于功能而言,具有更強(qiáng)的穩(wěn)定性。它的特征:抽象,封裝,繼承,多態(tài)。3〔無用4.請解釋類屬性、實例屬性及其區(qū)別。 答:實例屬性,由一個個的實例用來存儲所有實例都需要的屬性信息,不同實例的屬性值可能會不同。5.請解釋類方法、實例屬性及其區(qū)別。答:實例方法表示特定對象的行為,在聲明時前面不加static修飾符,在使用時需要發(fā)送給一個類實例。 類方法也稱為靜態(tài)方法,在方法聲明時前面需加static修飾符,類方法表示具體實例中類對象的共有行為。 區(qū)別:實例方法可以直接訪問實例變量,調(diào)用實例方法,實例方法可以直接訪問類變量,調(diào)用類方法;類方法可以直接調(diào)用類變量和類方法,類方法不能直接調(diào)用實例變量和實例方法;6.類的訪問控制符有哪幾種?具體含義及其區(qū)別。答:類的訪問控制符只有public〔公共類及無修飾符〔默認(rèn)類兩種。區(qū)別:當(dāng)使用public修飾符時表示所有其他的類都可以使用此類;當(dāng)沒有修飾符時,則只有與此類處于同一包中的其他類可以使用類。7類成員的訪問控制符有哪幾種?他們對類成員分別有哪些訪問限制的作用?答:類成員的訪問控制符有public,private,protecte及無修飾符.public<公有的>:用public修飾的成分表示公有的,也就是它可以被其他任何對象訪問<前提是對累成員所在的類訪問有訪問權(quán)限>.Private<保護(hù)的>:類中限定為private的成員只能被這個類本身訪問,在類外不可見。proteced〔保護(hù)的用該關(guān)鍵字修飾的成分是受保護(hù)的,只可以被同一類及其子類的實例對象訪問。無修飾符〔默認(rèn)的:public,private,protected這個三個限定符不是必須寫的。如果不寫,則表明是"friendly",相應(yīng)的成分可以被所在保重的各類訪問。8簡述構(gòu)造方法的特點?答:構(gòu)造方法主要有以下特點:構(gòu)造方法的方法名與類名相同;構(gòu)造方法沒有返回類型〔修飾符void也不能有;構(gòu)造方法通常被聲明為公有的〔public;構(gòu)造方法可以有任意多個參數(shù);構(gòu)造方法的主要作用是完成對象的初始化工作;構(gòu)造方法不能在程序中顯式的調(diào)用;在生成一個對象時,系統(tǒng)會自動調(diào)用該類的構(gòu)造方法為新生成的對象初始化。9如果在類聲明中聲明了構(gòu)造方法,系統(tǒng)是否還提供默認(rèn)的構(gòu)造方法?答:用戶在進(jìn)行類聲明時,如果沒有聲明任何構(gòu)造方法,系統(tǒng)會賦給此類一個默認(rèn)〔無參的構(gòu)造方法。但是,只要用戶聲明了構(gòu)造方法,即使沒有聲明無參的構(gòu)造方法,系統(tǒng)也不會再賦默認(rèn)的構(gòu)造方法。10:聲明Patient類表示在門診室中的病人。此類對象應(yīng)包括name〔astring\sex〔achar、age<aninteger>、weight<afloat0、allergies<aboolean>.聲明存取及修改方法。在一個單獨的累中,聲明測試方法,并生成兩個patient的例子:Atientapril=newPatient<>;April.setname<"zhangli">April.setSex<‘f’>;;April.setage<330;April.setweigeht<154.72>;April.setalolergies<true>;System.out.println<"那么:"+april.getname<>>;System.out.println<"sex:"+april.getsex<>>;System.out.println<"age:"+april.getage<>>;System.outprintln<"weught:"+april.getweight<>>;\System.out.println<"allergies:"+april.getallergies<>>;聲明并測試toString〔方法顯示一個病人的aga、sex、name及allergies屬性。答:publicclassPatient{privateStringname;privatecharsex;privateintage;privatefloatweight;privatebooleanallergies;publicvoidsetname<Stringa>{name=a;}publicvoidsetsex<charb>{sex=b;}publicvoidsetage<intc>{age=c;}publicvoidsetweight<floatd>{weight=d;}publicvoidsetallergies<booleane>{allergies=e;}publicStringgetname<>{returnname;}publicchargetsex<>{returnsex;}publicintgetage<>{returnage;}publicfloatgetweight<>{returnweight;}publicbooleangetallergies<>{returnallergies;}}publicclassText{publicstaticvoidmain<Stringargs[]>{Patientapril=newPatient<>;april.setname<"ZhangLi">;april.setsex<'f'>;april.setage<33>;april.setweight<154.72f>;april.setallergies<true>;System.out.println<"Name:"+april.getname<>>;System.out.println<"sex:"+april.getsex<>>;System.out.println<"age:"+april.getage<>>;System.out.println<"weight:"+april.getweight<>>;System.out.println<"allergies:"+april.getallergies<>>;}}11:聲明并測試一個復(fù)數(shù)類,其方法包括toString〔及復(fù)數(shù)的加、減、乘運算。答:publicclassComplex{privatefloata;privatefloatb;publicStringtoString<>{if<a!=0>return<a+"i"+"+"+b>;elsereturn<""+b>;}publicComplex<floata,floatb>{this.a=a;this.b=b;}publicvoidAdd<Complexp>{this.a+=p.a;this.b+=p.b;}publicvoidDecrease<Complexp>{this.a-=p.a;this.b-=p.b;}publicvoidMultiply<Complexp>{this.a=this.a*p.a;this.b=this.b*p.b;}}publicclassComplexTexter{publicstaticvoidmain<Stringargs[]>{Complexa=newComplex<2,4>;Complexb=newComplex<5,8>;a.Add<b>;System.out.println<a.toString<>+"\n">;a.Decrease<b>;System.out.println<a.toString<>+"\n">;a.Multiply<b>;System.out.println<a.toString<>+"\n">;}}12:什么是UML?它由哪幾部分組成?答:UML是圖形化〔即可視化的建模語言,成為面向?qū)ο蠼5臉?biāo)準(zhǔn)語言。它由四部分組成:〔1視圖〔2圖〔3模型元素〔4通用機(jī)制13.常用的類與類之間的關(guān)系有哪幾種。答:有關(guān)聯(lián)、依賴、流、泛化、實現(xiàn)、使用。14.考慮學(xué)院、系及教員應(yīng)該具有哪些屬性,并畫出它們之間關(guān)系的類圖。第三章課后習(xí)題答案1.設(shè)N為自然數(shù):n!=1*2*3*….*n稱為n的階乘,并且規(guī)定0!=1.試編程計算2!,4!,6!he10!.并將結(jié)果輸出到屏幕上。答:publicclassMul{publicstaticvoidmain<Stringargs[]>{inti,n;floats;for<n=0;n<=10;n=n+2>{if<n==0>System.out.println<"0!=1\n">;else{s=1;for<i=1;i<=n;i++>s=s*i;System.out.println<n+"!="+s+"\n">;}}}}2.編寫程序,接收用戶從鍵鍵盤上輸入的三個整數(shù)x,y,z..從中選出最大和最小者,并編程實現(xiàn)。答:publicclassMath{publicstaticvoidmain<Stringargs[]>{int[]IntArg=newint[args.length];for<inti=0;i<args.length;i++>{IntArg[i]=Integer.parseInt<args[i]>;}intmax,min;max=IntArg[0]>IntArg[1]?IntArg[0]:IntArg[1];max=max>IntArg[2]?max:IntArg[2];min=IntArg[0]<IntArg[1]?IntArg[0]:IntArg[1];min=min<IntArg[2]?min:IntArg[2];System.out.println<"max="+max>;System.out.println<"min="+min>;}}3.求出100一枚的宿舍,并將這些數(shù)在屏幕上5個乙杭地顯示出來。答:publicclassSu{publicstaticvoidmain<Stringargs[]>{intn,i,k=0,y;for<n=2;n<=100;n++>{y=1;for<i=2;i<n;i++>if<n%i==0>{y=0;break;}if<y==1>{k++;System.out.print<n+"">;if<k%5==0>System.out.print<"\n">;}}}}4.使用java.lang.Math類,生成100個0---99之間的隨機(jī)整數(shù),找出他們之中的最大值和最小值,并統(tǒng)計大于50的整數(shù)個數(shù)。publicclassRandom{publicstaticvoidmain<String[]args>{intMinNum,MaxNum,n=0;int[]array=newint[100];array[0]=<int><Math.random<>*100>;MinNum=array[0];MaxNum=array[0];System.out.println<"數(shù)列為:">;System.out.print<array[0]+"">;for<inti=0;i<100;i++>{array[i]=<int><Math.random<>*100>;if<array[i]>50>n++;if<array[i]>=MaxNum>MaxNum=array[i];if<array[i]<=MinNum>MinNum=array[i];System.out.print<array[i]+"">;}System.out.println<>;System.out.println<"MinNum="+MinNum>;System.out.println<"MaxNum="+MaxNum>;System.out.println<"大于50的整數(shù)個數(shù)有:"+n>;}}5.接收用戶從鍵盤上輸入的兩個整數(shù),求兩個數(shù)的最大公約數(shù)和最小公倍數(shù),并輸出。publicclassTest2{publicstaticvoidmain<String[]args>{int[]I=newint[args.length];for<inti=0;i<args.length;i++>{I[i]=Integer.parseInt<args[i]>;}intm,n,temp,t;if<I[0]<I[1]>{temp=I[0];I[0]=I[1];I[1]=temp;}m=I[0];n=I[1];t=m%n;while<t!=0>{m=t;n=m;t=m%n;}System.out.println<"兩個數(shù)的最大公約數(shù)為:"+n>;System.out.println<"兩個數(shù)的最小公倍數(shù)為:"+I[0]*I[1]/n>;}}6.從鍵盤上輸入一件物品的價格〔范圍在0.10~5.00元.,假設(shè)用戶支付了一張5元紙幣,請列出一種找零的方案,使得紙幣及硬幣的個數(shù)最少。如3.68元,應(yīng)為兩元一張、一元一張、五角一個、一角一個、五分一個、二分一個、一分一個。//Price類importjava.io.*;publicclassPrice{publicstaticvoidmain<Stringargs[]>{System.out.println<"enteranumber<0.01----5.00>:">;floata=Keyboard.getFloat<>;intc=<int><a*100>;intb=500-c;System.out.println<"找零如下:">;if<b/200!=0>{System.out.println<b/200+"張2元">;b-=<b/200>*200;}if<b/100!=0>{System.out.println<b/100+"張1元">;b-=<b/100>*100;}if<b/50!=0>{System.out.println<b/50+"張5角">;b-=<b/50>*50;}if<b/20!=0>{System.out.println<b/20+"張2角">;b-=<b/20>*20;}if<b/10!=0>{System.out.println<b/10+"張1角">;b-=<b/10>*10;}if<b/5!=0>{System.out.println<b/5+"個5分">;b-=<b/5>*5;}if<b/2!=0>{System.out.println<b/2+"個2分">;b-=<b/2>*2;}if<b!=0>System.out.println<b+"個1分">;}}//Keyboard類importjava.io.*;publicclassKeyboard{staticBufferedReaderinputStream=newBufferedReader<newInputStreamReader<System.in>>;publicstaticintgetInteger<>{try{return<Integer.valueOf<inputStream.readLine<>.trim<>>.intValue<>>;}catch<Exceptione>{e.printStackTrace<>;return0;}}publicstaticStringgetString<>{try{return<inputStream.readLine<>>;}catch<IOExceptione>{return"0";}}publicstaticfloatgetFloat<>{Strings="";try{BufferedReaderin=newBufferedReader<newInputStreamReader<System.in>>;s=in.readLine<>;return<Float.parseFloat<s>>;}catch<IOExceptione>{System.out.println<"輸入非法!">;return<0.0f>;}}}運行結(jié)果:7.什么是異常?解釋拋出、捕獲的含義。答:異常又稱為例外,是特殊的運行錯誤對象,在程序中可以強(qiáng)制編譯器來處理程序運行中的發(fā)生的并非由程序本身所造成的錯誤;拋出異常:把生成異常對象并提交的過程稱為拋出異常;拋出異常是java中一個程序處理動作,檢查異常時要么在方法中聲明一個異常拋出,用try-catch語句捕獲異常,并進(jìn)行處理。8.簡述Java的異常處理機(jī)制。答:java中聲明了很多異常類,每個異常類都代表了一種運行錯誤,類中包含了該運行錯誤的信息和處理錯誤的方法等內(nèi)容。每當(dāng)java程序運行過程中發(fā)生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應(yīng)時,系統(tǒng)都會產(chǎn)生一個相應(yīng)的該異常類的對象,即產(chǎn)生一個異常。一旦一個異常對象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來處理它,確保不會產(chǎn)生死機(jī)、死循環(huán)或其他對操作系統(tǒng)的損害,從而保證了整個程序運行的安全性。9.系統(tǒng)定義的異常與用戶自定義的異常有何不同?如何使用這兩類異常?答:系統(tǒng)定義的特定情況出現(xiàn)的問題,而此時用來對可能遇到的問題進(jìn)行處理。用戶定義的是自己覺得可能會出現(xiàn)問題時,需要處理的。這樣避免程序中斷或是出現(xiàn)未知錯誤。系統(tǒng)異常有兩種一種是運行時異常,一種是普通異常,普通異常要求用戶捕獲或者拋出的,不補(bǔ)貨或者拋出就會編譯不通過。運行時異常編譯可以通過,但是運行時才顯露出來。10.用戶如何自定義異常?編程實現(xiàn)一個用戶自定義異常。〔1定義mytestimportjava.io.*;publicclassmytest{ privatestaticintquotient<intnumber,intdenominator>throws DivideByZeroException{ if<denominator==0> thrownewDivideByZeroException<>; return<number/denominator>;}publicstaticvoidmain<Stringargs[]>{ intnumber1=0,number2=0,result=0; try{ System.out.println<"輸入第一個數(shù)字:">; number1=Integer.valueOf<Keyboard.getString<>>.intValue<>; System.out.println<"輸入第二個數(shù)字:">; number2=Integer.valueOf<Keyboard.getString<>>.intValue<>; result=quotient<number1,number2>; } catch<NumberFormatExceptione>{ System.out.println<e.toString<>>; System.exit<-1>; } System.out.println<number1+"/"+number2+"="+result>;}}〔2定義DivideByZeroExceptionpublicclassDivideByZeroExceptionextendsArithmeticException{ publicDivideByZeroException<>{ super<"除數(shù)不能為0!">;}}〔3定義Keyboardimportjava.io.*;publicclassKeyboard{staticBufferedReaderinputStream=newBufferedReader<newInputStreamReader<System.in>>;publicstaticintgetInteger<>{try{return<Integer.valueOf<inputStream.readLine<>.trim<>>.intValue<>>;}catch<Exceptione>{e.printStackTrace<>;return0;}}publicstaticStringgetString<>{try{return<inputStream.readLine<>>;}catch<IOExceptione>{return"0";}}}第四章課后習(xí)題答案1.子類將繼承父類所有的屬性和方法嗎?為什么?答:不,子類不能直接訪問從父類中繼承的私有屬性及方法,但可以對公有及保護(hù)方法進(jìn)行訪問。2.方法的覆蓋與方法的重載有何不同?答:覆蓋是運用在子類中實現(xiàn)與父類相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父類更多的事情;在子類中需要取消從父類繼承的方法。3.聲明兩個帶有無參構(gòu)造方法的兩個類A和B,聲明A的子類C,并且聲明B為C的一個成員,不聲明C的構(gòu)造方法。編寫測試代碼,生成類C的實例對象,并觀察結(jié)果。//A類publicclassA{ publicA<>{ System.out.println<"輸出A類">; }}//B類publicclassB{ publicB<>{ System.out.println<"輸出B類">; }}//C類publicclassCextendsA{ Bb=newB<>;}//測試類publicclasstest4_3{ publicstaticvoidmain<Stringargs[]>{ Cc=newC<>; }}運行結(jié)果:4.聲明一個基類A,它只有一種非默認(rèn)構(gòu)造方法;聲明A的子類B,B具有默認(rèn)方法及非默認(rèn)方法,并在B的構(gòu)造方法中調(diào)用基類A的構(gòu)造方法。//A類publicclassA{publicA<Stringlin>{ System.out.println<"A類的非默認(rèn)構(gòu)造方法"+lin>; }}//B類publicclassBextendsA{publicB<>{super<"Fuckyourteacher">; System.out.println<"B默認(rèn)類構(gòu)造方法">; }publicB<Stringlin>{super<lin>; System.out.println<"B類非構(gòu)造方法">; }}//測試類publicclasstest4_4{publicstaticvoidmain<Stringargs[]>{newB<>; System.out.println<>;newB<"Fuckmyteacher">; }}運行結(jié)果:5.聲明一個類,它具有一種方法,此方法被重載三次,派生一個新類,并增加一種新的重載方法,編寫測試類驗證四種方法對于派生類驗證四種方法對于派生類都有效。//A類publicclassA{ publicvoidshowTime<>{ System.out.println<"空重載">; } publicvoidshowTime<intl>{ System.out.println<"整形參數(shù)重載">; } publicvoidshowTime<charl>{ System.out.println<"字符參數(shù)重載">; }}//B類publicclassBextendsA{ publicvoidshowTime<Stringl>{ System.out.println<"字符串參數(shù)重載">; }}//測試類publicclasstest4_5{publicstaticvoidmain<Stringargs[]>{ Bb=newB<>; b.showTime<>; b.showTime<5>; b.showTime<'f'>; b.showTime<"林楚金">; }}6.聲明一個具有final方法的類,聲明一個派生類,并試圖對這個方法進(jìn)行重寫,會有什么結(jié)果。//A類publicclassA{ publicfinalvoidshowTime<>{ System.out.println<"類A中方法">; }}//B類publicclassBextendsA{ publicvoidshowTime<>{ System.out.println<"類B中方法">; }}//測試類publicclasstest4_6{ publicstaticvoidmain<Stringargs[]>{ Bb=newB<>; b.showTime<>; }}運行結(jié)果:〔說白了就是B中showTime<>的無法覆蓋A中showTime<>,被覆蓋為final,不能覆蓋。7.聲明一個final類,并試圖聲明其派生類,會有什么結(jié)果。//A類publicfinalclassA{}//B類publicclassBextendsA{}//測試類publicclasstest4_7{ publicstaticvoidmain<Stringargs[]>{ Bb=newB<>; }}運行結(jié)果:〔說白了就是無法從A中進(jìn)行繼承8.什么是抽象類?抽象類中是否一定要包括抽象方法?答:抽象類是一個不完全的類,不能使用new方法進(jìn)行實例化。抽象類可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必須是抽象類。9.this和super分別有哪些特殊含義?都有哪些種用法?答:this表示當(dāng)前類;super表示調(diào)用父類。在定義類的時候用到,this是當(dāng)前對象的引用,super是當(dāng)前對象的父類對象的引用,一般的都是把super用在構(gòu)造函數(shù)中。10.完成下面父類及子類的聲明:<1>聲明Student類屬性包括學(xué)號、姓名、英語成績、數(shù)學(xué)成績、計算機(jī)成績和總成績。方法包括構(gòu)造方法、get方法、set方法、toString方法、equals方法、compare方法〔比較兩個學(xué)生的總成績,結(jié)果分為大于、小于、等于,sum方法〔計算總成績和testScore方法〔計算評測成績。注:評測成績可以取三門課成績的平均分,另外任何一門課的成績的改變都需要對總成績進(jìn)行重新計算,因此,在每一個set方法中應(yīng)調(diào)用sum方法計算總成績。publicclassStudent{Stringid;Stringname;floatscoreOfenglish;floatscoreOfmath;floatscoreOfcomputer;floatscoreOfsum;//構(gòu)造方法publicStudent<>{}publicStudent<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer>{this.id=aid;=aname;this.scoreOfenglish=ascoreOfenglish;this.scoreOfmath=ascoreOfmath;this.scoreOfcomputer=ascoreOfcomputer;//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;this.scoreOfsum=sum<>;}//sum方法publicfloatsum<>{return<this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer>;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3>;}//6個get方法publicStringgetid<>{return<id>;}publicStringgetname<>{return<name>;}publicfloatgetscoreOfenglish<>{return<scoreOfenglish>;}publicfloatgetscoreOfmath<>{return<scoreOfmath>;}publicfloatgetscoreOfcomputer<>{return<scoreOfcomputer>;}publicfloatgetscoreOfsum<>{return<scoreOfsum>;}//5個set方法publicvoidsetid<Stringnewid>{this.id=newid;}publicvoidsetname<Stringnewname>{=newname;}publicvoidsetscoreOfenglish<floatnewscoreOfenglish>{this.scoreOfenglish=newscoreOfenglish;this.scoreOfsum=sum<>;}publicvoidsetscoreOfmath<floatnewscoreOfmath>{this.scoreOfmath=newscoreOfmath;this.scoreOfsum=sum<>;}publicvoidsetscoreOfcomputer<floatnewscoreOfcomputer>{this.scoreOfcomputer=newscoreOfcomputer;this.scoreOfsum=sum<>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum>;}//compare方法/比較2學(xué)生總分publicvoidcompare<Studentx>{if<this.getscoreOfsum<>>x.getscoreOfsum<>>System.out.println<this.getname<>+"總分大于"+x.getname<>>;if<this.getscoreOfsum<><x.getscoreOfsum<>>System.out.println<this.getname<>+"總分小于"+x.getname<>>;elseSystem.out.println<this.getname<>+"總分等于"+x.getname<>>;}//equals方法/比較2學(xué)生學(xué)號是否相等<還沒完善>/**publicbooleanequals<Objectx>{if<this.getClass<>!=x.getClass<>>returnfalse;Studentb=<Student>x;if<this.id==b.getid<>>returntrue;}*/}<2聲明StudentXW<學(xué)習(xí)委員>類為Student類的子類。在StudentXW類中增加責(zé)任屬性,并重寫testScore方法〔評測成績=三門課平均分+3publicclassStudentXWextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentXW<>{super<>;//responsibility="";}publicStudentXW<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility>{super<aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer>;responsibility=aresponsibility;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3+3>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility>;}}<3聲明StudentBZ類為Student類的子類在StudentBZ類中增加責(zé)任屬性,并重寫testScore方法〔評測成績=三門課平均分+5publicclassStudentBZextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentBZ<>{super<>;//responsibility="";}publicStudentBZ<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility>{super<aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer>;responsibility=aresponsibility;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3+5>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility>;}}4聲明測試類,生成若干個Student類、StudentXW類及StudentBZ類對象,并分別計算它們的評測成績<建議采用:寫一個測試函數(shù),該函數(shù)以父類student數(shù)組作為參數(shù)>。importjava.text.*;publicclasstest4_10{publicstaticvoidmain<Stringargs[]>{Studentsu=newStudent<"001","蘇軾",56.00f,87.00f,95.00f>; Studentdu=newStudent<"002","杜甫",86.00f,75.00f,80.00f>; Studentbai=newStudent<"003","白居易",42.00f,77.00f,65.00f>; Studentliu=newStudent<"004","柳宗元",67.00f,67.00f,67.00f>; StudentXWou=newStudentXW<"005","歐陽修",89.00f,98.00f,90.00f,"數(shù)學(xué)代表">; StudentXWwang=newStudentXW<"006","王安石",98.00f,87.00f,36.00f,"英語代表">; StudentBZli=newStudentBZ<"007","李白",89.00f,87.00f,87.00f,"班長">;System.out.print<li>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<li.testScore<>>>; System.out.println<>; System.out.print<wang>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<wang.testScore<>>>; System.out.println<>; System.out.print<ou>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<ou.testScore<>>>; System.out.println<>; System.out.print<su>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<su.testScore<>>>; System.out.println<>; System.out.print<du>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<du.testScore<>>>; System.out.println<>; System.out.print<bai>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<bai.testScore<>>>; System.out.println<>; System.out.print<liu>; System.out.println<"\n評測成績:"+newDecimalFormat<"0.00">.format<liu.testScore<>>>;}}運行test4_10的結(jié)果如下:〔很好玩吧,李白,我讓你掛科。11.包有什么作用?如何創(chuàng)建包和引用包中的類?答:包是一種松散的類的組合,一般不要求處于同一包中的類型有明確的相互關(guān)系,但由于同一包中的類在默認(rèn)情況下可以相互訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個包里。利用包來管理類,可實現(xiàn)類的共享與復(fù)用。在操作系統(tǒng)中,目錄用來組織文件,設(shè)置權(quán)限。只要在要用到包中類的時候,在該引用類的第一行加上:package<包的全路徑>即可。第五章課后習(xí)題答案1.什么是接口?接口起什么作用?接口與抽象類有何區(qū)別?答:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為<功能>。作用:接口是面向?qū)ο蟮囊粋€重要機(jī)制,使用接口可以實現(xiàn)多態(tài)繼承;接口中的所有方法都是抽象的,這些抽象方法由實現(xiàn)這一接口的不同類型來具體;接口還可以用來實現(xiàn)不同類之間的常量共享。與抽象類不同的是:接口允許在看起來不相干的類之間定義共同行為。2.試編程證明接口中的屬性都隱含為static及final,所有的方法都為public。//定義接口Shape2DinterfaceShape2D{doublePi=3.14;doublearea<>;}//Circle類繼承接口Shape2DpublicclassCircleimplementsShape2D{doubleradius;publicCircle<doubler>{radius=r;}publicdoublearea<>{returnPi*radius*radius;}}//A類〔測試接口中隱含final的area<>方法publicclassAextendsShape2D{publicdoublearea<>;}//test5_2publicclasstest5_2{publicstaticvoidmain<Stringargs[]>{Circlec=newCircle<10>;System.out.println<"Pi=3.14圓的面積:"+c.area<>>;SetPib=newSetPi<3.00>;System.out.println<"改變Pi=3.00圓的面積:"+c.area<>>;}}運行結(jié)果:3.在什么情況下,可以對父類對象的引用進(jìn)行強(qiáng)制類型轉(zhuǎn)換,使其轉(zhuǎn)化成子類對象的引用?答:一個對象被塑型為父類或接口后,可以再一次被塑型回到它原來所屬的類,即轉(zhuǎn)化成原類對象的引用。4.聲明一個接口,此接口至少具有一個方法;在一個方法中聲明內(nèi)部類實現(xiàn)此接口,并返回此接口的引用。//A類接口publicinterfaceA{ voidfuck<>;}//B類publicclassB{ publicAfuck<>{ returnnewA<>{ publicvoidfuck<>{ System.out.println<"B類聲明實現(xiàn)A接口類并返回接口的應(yīng)用——Fuckyou!">; } };/*注意這里有分號";"*/ }}//test5_4publicclasstest5_4{ publicstaticvoidmain<String[]args>{ newB<>.fuck<>.fuck<>; }}運行結(jié)果:5.聲明一個具有內(nèi)部類的類,此內(nèi)部類只有一個非默認(rèn)的構(gòu)造方法;聲明另外一個具有內(nèi)部類的類,此內(nèi)部類繼承第一個內(nèi)部類。//A類classA{ classClassOfA{ publicClassOfA<>{ } }}//B類publicclassB{ classClassOfBextendsA.ClassOfA{ publicClassOfB<Ab>{ b.super<>; } }}6.聲明一個具有兩個方法的類,在第一個方法中調(diào)用第二個方法。聲明此類的一個子類,并在子類中重寫第二個方法。生成一個子類的對象,并將其塑型為基類,調(diào)用第一個方法,解釋會發(fā)生什么?//A類publicclassA{ publicStringWay1<>{return"A的方法1和"+Way2<>;} publicStringWay2<>{return"A的方法2";}}//B類publicclassBextendsA{ publicStringWay2<>{ return"B的方法2"; }}//test5_6publicclasstest5_6{ publicstaticvoidmain<Stringargs[]>{ Aa=newB<>; System.out.println<a.Way1<>>;}}7.什么是多態(tài)?如何實現(xiàn)多態(tài)?答:多態(tài)性是指不同類型的對象可以響應(yīng)相同的消息。利用向上塑性技術(shù),一個父類的應(yīng)引用變量可以指向不同的子類對象;而利用動態(tài)綁定技術(shù),可以再運行時根據(jù)父類引用變量所指對象的世紀(jì)類型執(zhí)行相應(yīng)的子類方法,從而實現(xiàn)多態(tài)性。8.在第4章習(xí)題10的基礎(chǔ)上,聲明測試類完成對多態(tài)性的測試。〔1在主方法中聲明Student類的數(shù)組〔含五個元素〔2生成五個對象存入數(shù)組:其中三個Student類的對象、一個StudentXW類的對象、一個StudentBZ類的對象?!?將方法testScore〔發(fā)送給數(shù)組的每一個元素,輸出結(jié)果,并分析具體執(zhí)行的是哪一個類中的方法。//Student類publicclassStudent{Stringid;Stringname;floatscoreOfenglish;floatscoreOfmath;floatscoreOfcomputer;floatscoreOfsum;//構(gòu)造方法publicStudent<>{}publicStudent<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer>{this.id=aid;=aname;this.scoreOfenglish=ascoreOfenglish;this.scoreOfmath=ascoreOfmath;this.scoreOfcomputer=ascoreOfcomputer;//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;this.scoreOfsum=sum<>;}//sum方法publicfloatsum<>{return<this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer>;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3>;}//6個get方法publicStringgetid<>{return<id>;}publicStringgetname<>{return<name>;}publicfloatgetscoreOfenglish<>{return<scoreOfenglish>;}publicfloatgetscoreOfmath<>{return<scoreOfmath>;}publicfloatgetscoreOfcomputer<>{return<scoreOfcomputer>;}publicfloatgetscoreOfsum<>{return<scoreOfsum>;}//5個set方法publicvoidsetid<Stringnewid>{this.id=newid;}publicvoidsetname<Stringnewname>{=newname;}publicvoidsetscoreOfenglish<floatnewscoreOfenglish>{this.scoreOfenglish=newscoreOfenglish;this.scoreOfsum=sum<>;}publicvoidsetscoreOfmath<floatnewscoreOfmath>{this.scoreOfmath=newscoreOfmath;this.scoreOfsum=sum<>;}publicvoidsetscoreOfcomputer<floatnewscoreOfcomputer>{this.scoreOfcomputer=newscoreOfcomputer;this.scoreOfsum=sum<>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum>;}//compare方法/比較2學(xué)生總分publicvoidcompare<Studentx>{if<this.getscoreOfsum<>>x.getscoreOfsum<>>System.out.println<this.getname<>+"總分大于"+x.getname<>>;if<this.getscoreOfsum<><x.getscoreOfsum<>>System.out.println<this.getname<>+"總分小于"+x.getname<>>;elseSystem.out.println<this.getname<>+"總分等于"+x.getname<>>;}//equals方法/比較2學(xué)生學(xué)號是否相等/**publicbooleanequals<Objectx>{if<this.getClass<>!=x.getClass<>>returnfalse;Studentb=<Student>x;if<this.id==b.getid<>>returntrue;}*/}//StudentXWpublicclassStudentXWextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentXW<>{super<>;//responsibility="";}publicStudentXW<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility>{super<aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer>;responsibility=aresponsibility;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3+3>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility>;}}//StudentBZpublicclassStudentBZextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentBZ<>{super<>;//responsibility="";}publicStudentBZ<Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility>{super<aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer>;responsibility=aresponsibility;}//testScore測評成績/平均分publicfloattestScore<>{return<this.scoreOfsum/3+5>;}//toString方法publicStringtoString<>{return<"__"+this.id+"\n__"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility>;}}//test5_8importjava.text.*;publicclasstest5_8{publicstaticvoidmain<Stringargs[]>{ Studentstudent[]={ newStudent<"001","蘇軾",56.00f,87.00f,95.00f>, newStudent<"002","杜甫",86.00f,75.00f,80.00f>, newStudent<"003","白居易",42.00f,77.00f,65.00f>, newStudentXW<"006","王安石",98.00f,87.00f,36.00f,"英語代表">, newStudentBZ<"007","李白",89.00f,87.00f,87.00f,"班長"> }; for<inti=0;i<5;i++> { System.out.println<"學(xué)生名字:"+student[i].getname<>+"\t評測成績:"+newDecimalFormat<"0.00">.format<student[i].testScore<>>>; }}}運行結(jié)果:在主函數(shù)定義student數(shù)組的五個對象Studentstudent[5]={newStudent<>,newStudent<>,newStudent<>,newStudentXW<>,newStudentBZ<>}中,輸出時,第1、2、3個調(diào)用的是Student中的方法,第4個調(diào)用的是StudentXW的方法,第5個調(diào)用的是StudentBZ的方法。第六章課后習(xí)題答案1.將本章例6-1至6-18中出現(xiàn)的文件的構(gòu)造方法均改為使用File類對象作為參數(shù)實現(xiàn)。個人理解:File類只能對整文件性質(zhì)進(jìn)行處理,而沒法通過自己直接使用file.Read<>或者是file.write<>類似方法對文件內(nèi)容進(jìn)行寫或者讀取。注意:是直接;下面只提供一個例2變化,其他的你自己做,10幾道啊,出這題的人真他媽有病。importjava.io.*;publicclasstest6_2{publicstaticvoidmain<String[]args>throwsIOException{ StringfileName="D:\\Hello.txt"; Filewriter=newFile<fileName>; writer.createNewFile<>; BufferedWriterinput=newBufferedWriter<newFileWriter<writer>>; input.write<"Hello!\n">; input.write<"thisismyfirsttextfile,\n">; input.write<"你還好嗎?\n">; input.close<>; }}運行結(jié)果:〔電腦系統(tǒng)問題,沒法換行,所以一般使用BuffereWriter中newLine<>實現(xiàn)換行2.模仿文本文件復(fù)制的例題,編寫對二進(jìn)制文件進(jìn)行復(fù)制的程序.//CopyMaker類importjava.io.*;classCopyMaker{StringsourceName,destName;BufferedInputStreamsource; BufferedOutputStreamdest;intline;//打開源文件和目標(biāo)文件,無異常返回trueprivatebooleanopenFiles<>{try{source=newBufferedInputStream<newFileInputStream<sourceName>>; }catch<IOExceptioniox>{ System.out.println<"Problemopening"+sourceName>;returnfalse;}try{dest=newBufferedOutputStream<newFileOutputStream<destName>>;}catch<IOExceptioniox>{ System.out.println<"Problemopening"+destName>;returnfalse;}returntrue;}//復(fù)制文件privatebooleancopyFiles<>{try{line=source.read<>;while<line!=-1>{dest.write<line>; line=source.read<>; } }catch<IOExceptioniox>{ System.out.println<"Problemreadingorwriting">;returnfalse; }returntrue; }//關(guān)閉源文件和目標(biāo)文件privatebooleancloseFiles<>{booleanretVal=true;try{source.close<>;}catch<IOExceptioniox>{ System.out.println<"Problemclosing"+sourceName>; retVal=false; }try{dest.close<>;}catch<IOExceptioniox>{ System.out.println<"Problemclosing"+destName>; retVal=false; }returnretVal; }//執(zhí)行復(fù)制publicbooleancopy<Stringsrc,Stringdst>{sourceName=src;destName=dst;returnopenFiles<>&©Files<>&&closeFiles<>;}}//test6_2publicclasstest6_2{publicstaticvoidmain<String[]args>{ Strings1="lin.txt",s2="newlin.txt";if<newCopyMaker<>.copy<s1,s2>> System.out.print<"復(fù)制成功">;else System.out.print<"復(fù)制失敗">;}}運行前的兩個文本:lin.txt和newlin.txt〔為空運行后:3.創(chuàng)建一存儲若干隨機(jī)整數(shù)的文本文件,文件名、整數(shù)的個數(shù)及范圍均由鍵盤輸入。//memory存儲類importjava.io.*;importjava.util.Random;publicclassmemory{privateStringname;privateintcount;privateintMax;privateintMin;publicmemory<Stringn,intc,intmin,intmax>{=n;this.count=c;this.Min=min;this.Max=max; }publicvoidstartmemory<>{try{ FileWriterout=newFileWriter<name>;intlimit=Max-Min; Randomrandom=newRandom<>;for<inti=1;i<=count;i++>{intnumber=Min+random.nextInt<limit>; System.out.print<number>; System.out.print<"">; out.write<number+"">; } out.close<>; }catch<IOExceptioniox>{ System.out.println<"方法startmemory<>有問題">; } }}//test6_3importjava.io.*;importjava.util.Scanner;publicclasstest6_3{publicstaticvoidmain<String[]args>throwsIOException{//BufferedReader StringfileName;intcount,min,max; Scannerin=newScanner<System.in>; System.out.println<"輸入要存儲的文件名">; fileName=in.next<>; System.out.println<"輸入隨機(jī)數(shù)個數(shù)">; count=in.nextInt<>; System.out.println<"輸入隨機(jī)數(shù)最小值">; min=in.nextInt<>; System.out.println<"輸入隨機(jī)數(shù)最大值">; max=in.nextInt<>; memoryM=newmemory<fileName,count,min,max>; M.startmemory<>; }}}運行結(jié)果:naruto文件存儲二進(jìn)制數(shù):4.分別使用FileWriter和BufferedWriter往文件中寫入10萬個隨機(jī)數(shù),比較用時的多少。//FileWriter方法importjava.io.*;publicclassfileWriter{publicstaticvoidmain<String[]args>throwsIOException{longtime=System.currentTimeMillis<>;//當(dāng)前時間 FileWriterfilewriter=newFileWriter<"filewriter.txt">;intnumber;for<inti=1;i<=100000;i++>{ number=<int><Math.random<>*10000>; filewriter.write<number+"">; } filewriter.close<>; time=System.currentTime

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論