語言程序設(shè)計(jì)第2版-課后習(xí)題與答案_第1頁
語言程序設(shè)計(jì)第2版-課后習(xí)題與答案_第2頁
語言程序設(shè)計(jì)第2版-課后習(xí)題與答案_第3頁
語言程序設(shè)計(jì)第2版-課后習(xí)題與答案_第4頁
語言程序設(shè)計(jì)第2版-課后習(xí)題與答案_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

...wd......wd......wd...Java語言程序設(shè)計(jì)第2版(鄭莉)第二章習(xí)題答案1.什么是對(duì)象、類,它們之間的聯(lián)系答:1〕對(duì)象是包含現(xiàn)實(shí)世界物體特征的抽象實(shí)體,它反映系統(tǒng)為之保存信息和與它交互的能力。對(duì)象是一些屬性及服務(wù)的封裝體,在程序設(shè)計(jì)領(lǐng)域,可以用“對(duì)象=數(shù)據(jù)+作用于這些數(shù)據(jù)上的操作〞來表示?,F(xiàn)實(shí)生活中對(duì)象是指客觀世界的實(shí)體;在程序中對(duì)象是指一組變量和相關(guān)方法的集合。2〕類是既有一樣操作功能和一樣的數(shù)據(jù)格式的對(duì)象的集合與抽象!兩者的關(guān)系:對(duì)象是類的具體實(shí)例.。2.什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法它有那些基本特征答:面向?qū)ο蟪绦蛟O(shè)計(jì)從所處理的數(shù)據(jù)入手,以數(shù)據(jù)為中心而不是以服務(wù)為中心來描述系統(tǒng)。它把編程問題視為一個(gè)數(shù)據(jù)集合,數(shù)據(jù)相對(duì)于功能而言,具有更強(qiáng)的穩(wěn)定性。它的特征:抽象,封裝,繼承,多態(tài)。3〔無用〕4.請(qǐng)解釋類屬性、實(shí)例屬性及其區(qū)別。 答:實(shí)例屬性,由一個(gè)個(gè)的實(shí)例用來存儲(chǔ)所有實(shí)例都需要的屬性信息,不同實(shí)例的屬性值可能會(huì)不同。5.請(qǐng)解釋類方法、實(shí)例屬性及其區(qū)別。答:實(shí)例方法表示特定對(duì)象的行為,在聲明時(shí)前面不加static修飾符,在使用時(shí)需要發(fā)送給一個(gè)類實(shí)例。 類方法也稱為靜態(tài)方法,在方法聲明時(shí)前面需加static修飾符,類方法表示具體實(shí)例中類對(duì)象的共有行為。 區(qū)別:實(shí)例方法可以直接訪問實(shí)例變量,調(diào)用實(shí)例方法,實(shí)例方法可以直接訪問類變量,調(diào)用類方法;類方法可以直接調(diào)用類變量和類方法,類方法不能直接調(diào)用實(shí)例變量和實(shí)例方法;6.類的訪問控制符有哪幾種具體含義及其區(qū)別。答:類的訪問控制符只有public〔公共類〕及無修飾符〔默認(rèn)類〕兩種。區(qū)別:當(dāng)使用public修飾符時(shí)表示所有其他的類都可以使用此類;當(dāng)沒有修飾符時(shí),那么只有與此類處于同一包中的其他類可以使用類。7類成員的訪問控制符有哪幾種?他們對(duì)類成員分別有哪些訪問限制的作用?答:類成員的訪問控制符有public,private,protecte及無修飾符.public(公有的):用public修飾的成分表示公有的,也就是它可以被其他任何對(duì)象訪問(前提是對(duì)累成員所在的類訪問有訪問權(quán)限).Private(保護(hù)的):類中限定為private的成員只能被這個(gè)類本身訪問,在類外不可見。proteced〔保護(hù)的〕用該關(guān)鍵字修飾的成分是受保護(hù)的,只可以被同一類及其子類的實(shí)例對(duì)象訪問。無修飾符〔默認(rèn)的〕:public,private,protected這個(gè)三個(gè)限定符不是必須寫的。如果不寫,那么說明是“friendly〞,相應(yīng)的成分可以被所在保重的各類訪問。8簡(jiǎn)述構(gòu)造方法的特點(diǎn)?答:構(gòu)造方法主要有以下特點(diǎn):構(gòu)造方法的方法名與類名一樣;構(gòu)造方法沒有返回類型〔修飾符void也不能有〕;構(gòu)造方法通常被聲明為公有的〔public〕;構(gòu)造方法可以有任意多個(gè)參數(shù);構(gòu)造方法的主要作用是完成對(duì)象的初始化工作;構(gòu)造方法不能在程序中顯式的調(diào)用;在生成一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新生成的對(duì)象初始化。9如果在類聲明中聲明了構(gòu)造方法,系統(tǒng)是否還提供默認(rèn)的構(gòu)造方法?答:用戶在進(jìn)展類聲明時(shí),如果沒有聲明任何構(gòu)造方法,系統(tǒng)會(huì)賦給此類一個(gè)默認(rèn)〔無參〕的構(gòu)造方法。但是,只要用戶聲明了構(gòu)造方法,即使沒有聲明無參的構(gòu)造方法,系統(tǒng)也不會(huì)再賦默認(rèn)的構(gòu)造方法。10:聲明Patient類表示在門診室中的病人。此類對(duì)象應(yīng)包括name〔astring〕\sex〔achar〕、age(aninteger)、weight(afloat0、allergies(aboolean).聲明存取及修改方法。在一個(gè)單獨(dú)的累中,聲明測(cè)試方法,并生成兩個(gè)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());聲明并測(cè)試toString〔〕方法顯示一個(gè)病人的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:聲明并測(cè)試一個(gè)復(fù)數(shù)類,其方法包括toString〔〕及復(fù)數(shù)的加、減、乘運(yùn)算。答: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)、依賴、流、泛化、實(shí)現(xiàn)、使用。14.考慮學(xué)院、系及教員應(yīng)該具有哪些屬性,并畫出它們之間關(guān)系的類圖。第三章課后習(xí)題答案1.設(shè)N為自然數(shù):n!=1*2*3*….*n稱為n的階乘,并且規(guī)定0!=1.試編程計(jì)算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.編寫程序,接收用戶從鍵鍵盤上輸入的三個(gè)整數(shù)x,y,z..從中選出最大和最小者,并編程實(shí)現(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個(gè)乙杭地顯示出來。答: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個(gè)0---99之間的隨機(jī)整數(shù),找出他們之中的最大值和最小值,并統(tǒng)計(jì)大于50的整數(shù)個(gè)數(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ù)個(gè)數(shù)有:"+n);}}5.接收用戶從鍵盤上輸入的兩個(gè)整數(shù),求兩個(gè)數(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("兩個(gè)數(shù)的最大公約數(shù)為:"+n);System.out.println("兩個(gè)數(shù)的最小公倍數(shù)為:"+I[0]*I[1]/n);}}6.從鍵盤上輸入一件物品的價(jià)格〔范圍在0.10~5.00元.〕,假設(shè)用戶支付了一張5元紙幣,請(qǐng)列出一種找零的方案,使得紙幣及硬幣的個(gè)數(shù)最少。如3.68元,應(yīng)為兩元一張、一元一張、五角一個(gè)、一角一個(gè)、五分一個(gè)、二分一個(gè)、一分一個(gè)。//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+"個(gè)5分");b-=(b/5)*5;}if(b/2!=0){System.out.println(b/2+"個(gè)2分");b-=(b/2)*2;}if(b!=0)System.out.println(b+"個(gè)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);}}}運(yùn)行結(jié)果:7.什么是異常解釋拋出、捕獲的含義。答:異常又稱為例外,是特殊的運(yùn)行錯(cuò)誤對(duì)象,在程序中可以強(qiáng)制編譯器來處理程序運(yùn)行中的發(fā)生的并非由程序本身所造成的錯(cuò)誤;拋出異常:把生成異常對(duì)象并提交的過程稱為拋出異常;拋出異常是java中一個(gè)程序處理動(dòng)作,檢查異常時(shí)要么在方法中聲明一個(gè)異常拋出,用try-catch語句捕獲異常,并進(jìn)展處理。8.簡(jiǎn)述Java的異常處理機(jī)制。答:java中聲明了很多異常類,每個(gè)異常類都代表了一種運(yùn)行錯(cuò)誤,類中包含了該運(yùn)行錯(cuò)誤的信息和處理錯(cuò)誤的方法等內(nèi)容。每當(dāng)java程序運(yùn)行過程中發(fā)生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常。一旦一個(gè)異常對(duì)象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來處理它,確保不會(huì)產(chǎn)生死機(jī)、死循環(huán)或其他對(duì)操作系統(tǒng)的損害,從而保證了整個(gè)程序運(yùn)行的安全性。9.系統(tǒng)定義的異常與用戶自定義的異常有何不同如何使用這兩類異常答:系統(tǒng)定義的特定情況出現(xiàn)的問題,而此時(shí)用來對(duì)可能遇到的問題進(jìn)展處理。用戶定義的是自己覺得可能會(huì)出現(xiàn)問題時(shí),需要處理的。這樣防止程序中斷或是出現(xiàn)未知錯(cuò)誤。系統(tǒng)異常有兩種一種是運(yùn)行時(shí)異常,一種是普通異常,普通異常要求用戶捕獲或者拋出的,不補(bǔ)貨或者拋出就會(huì)編譯不通過。運(yùn)行時(shí)異常編譯可以通過,但是運(yùn)行時(shí)才顯露出來。10.用戶如何自定義異常編程實(shí)現(xiàn)一個(gè)用戶自定義異常。〔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("輸入第一個(gè)數(shù)字:"); number1=Integer.valueOf(Keyboard.getString()).intValue(); System.out.println("輸入第二個(gè)數(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.子類將繼承父類所有的屬性和方法嗎為什么答:不,子類不能直接訪問從父類中繼承的私有屬性及方法,但可以對(duì)公有及保護(hù)方法進(jìn)展訪問。2.方法的覆蓋與方法的重載有何不同答:覆蓋是運(yùn)用在子類中實(shí)現(xiàn)與父類一樣的功能,但采用不同的算法或公式;在名字一樣的方法中,要做比父類更多的事情;在子類中需要取消從父類繼承的方法。3.聲明兩個(gè)帶有無參構(gòu)造方法的兩個(gè)類A和B,聲明A的子類C,并且聲明B為C的一個(gè)成員,不聲明C的構(gòu)造方法。編寫測(cè)試代碼,生成類C的實(shí)例對(duì)象,并觀察結(jié)果。//A類publicclassA{ publicA(){ System.out.println("輸出A類"); }}//B類publicclassB{ publicB(){ System.out.println("輸出B類"); }}//C類publicclassCextendsA{ Bb=newB();}//測(cè)試類publicclasstest4_3{ publicstaticvoidmain(Stringargs[]){ Cc=newC(); }}運(yùn)行結(jié)果:4.聲明一個(gè)基類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)造方法"); }}//測(cè)試類publicclasstest4_4{publicstaticvoidmain(Stringargs[]){newB(); System.out.println();newB("Fuckmyteacher"); }}運(yùn)行結(jié)果:5.聲明一個(gè)類,它具有一種方法,此方法被重載三次,派生一個(gè)新類,并增加一種新的重載方法,編寫測(cè)試類驗(yàn)證四種方法對(duì)于派生類驗(yàn)證四種方法對(duì)于派生類都有效。//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ù)重載"); }}//測(cè)試類publicclasstest4_5{publicstaticvoidmain(Stringargs[]){ Bb=newB(); b.showTime(); b.showTime(5); b.showTime('f'); b.showTime("林楚金"); }}6.聲明一個(gè)具有final方法的類,聲明一個(gè)派生類,并試圖對(duì)這個(gè)方法進(jìn)展重寫,會(huì)有什么結(jié)果。//A類publicclassA{ publicfinalvoidshowTime(){ System.out.println("類A中方法"); }}//B類publicclassBextendsA{ publicvoidshowTime(){ System.out.println("類B中方法"); }}//測(cè)試類publicclasstest4_6{ publicstaticvoidmain(Stringargs[]){ Bb=newB(); b.showTime(); }}運(yùn)行結(jié)果:〔說白了就是B中showTime()的無法覆蓋A中showTime(),被覆蓋為final,不能覆蓋?!?.聲明一個(gè)final類,并試圖聲明其派生類,會(huì)有什么結(jié)果。//A類publicfinalclassA{}//B類publicclassBextendsA{}//測(cè)試類publicclasstest4_7{ publicstaticvoidmain(Stringargs[]){ Bb=newB(); }}運(yùn)行結(jié)果:〔說白了就是無法從A中進(jìn)展繼承〕8.什么是抽象類抽象類中是否一定要包括抽象方法答:抽象類是一個(gè)不完全的類,不能使用new方法進(jìn)展實(shí)例化。抽象類可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必須是抽象類。9.this和super分別有哪些特殊含義都有哪些種用法答:this表示當(dāng)前類;super表示調(diào)用父類。在定義類的時(shí)候用到,this是當(dāng)前對(duì)象的引用,super是當(dāng)前對(duì)象的父類對(duì)象的引用,一般的都是把super用在構(gòu)造函數(shù)中。10.完成下面父類及子類的聲明:(1)聲明Student類屬性包括學(xué)號(hào)、姓名、英語成績(jī)、數(shù)學(xué)成績(jī)、計(jì)算機(jī)成績(jī)和總成績(jī)。方法包括構(gòu)造方法、get方法、set方法、toString方法、equals方法、compare方法〔比較兩個(gè)學(xué)生的總成績(jī),結(jié)果分為大于、小于、等于〕,sum方法〔計(jì)算總成績(jī)〕和testScore方法〔計(jì)算評(píng)測(cè)成績(jī)〕。注:評(píng)測(cè)成績(jī)可以取三門課成績(jī)的平均分,另外任何一門課的成績(jī)的改變都需要對(duì)總成績(jī)進(jìn)展重新計(jì)算,因此,在每一個(gè)set方法中應(yīng)調(diào)用sum方法計(jì)算總成績(jī)。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測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3);}//6個(gè)get方法publicStringgetid(){return(id);}publicStringgetname(){return(name);}publicfloatgetscoreOfenglish(){return(scoreOfenglish);}publicfloatgetscoreOfmath(){return(scoreOfmath);}publicfloatgetscoreOfcomputer(){return(scoreOfcomputer);}publicfloatgetscoreOfsum(){return(scoreOfsum);}//5個(gè)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("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(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é)號(hào)是否相等(還沒完善)/**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方法〔評(píng)測(cè)成績(jī)=三門課平均分+3〕publicclassStudentXWextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentXW(){super();//responsibility="";}publicStudentXW(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3+3);}//toString方法publicStringtoString(){return("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility);}}(3〕聲明StudentBZ類為Student類的子類在StudentBZ類中增加責(zé)任屬性,并重寫testScore方法〔評(píng)測(cè)成績(jī)=三門課平均分+5〕publicclassStudentBZextendsStudent{Stringresponsibility;//構(gòu)造方法publicStudentBZ(){super();//responsibility="";}publicStudentBZ(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3+5);}//toString方法publicStringtoString(){return("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(jī):"+this.scoreOfcomputer+"\n總分:"+this.scoreOfsum+"\n職位:"+this.responsibility);}}4〕聲明測(cè)試類,生成假設(shè)干個(gè)Student類、StudentXW類及StudentBZ類對(duì)象,并分別計(jì)算它們的評(píng)測(cè)成績(jī)(建議采用:寫一個(gè)測(cè)試函數(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,"班長(zhǎng)");System.out.print(li); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(li.testScore())); System.out.println(); System.out.print(wang); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(wang.testScore())); System.out.println(); System.out.print(ou); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(ou.testScore())); System.out.println(); System.out.print(su); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(su.testScore())); System.out.println(); System.out.print(du); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(du.testScore())); System.out.println(); System.out.print(bai); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(bai.testScore())); System.out.println(); System.out.print(liu); System.out.println("\n評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(liu.testScore()));}}運(yùn)行test4_10的結(jié)果如下:〔很好玩吧,李白,我讓你掛科?!?1.包有什么作用如何創(chuàng)立包和引用包中的類答:包是一種松散的類的組合,一般不要求處于同一包中的類型有明確的相互關(guān)系,但由于同一包中的類在默認(rèn)情況下可以相互訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個(gè)包里。利用包來管理類,可實(shí)現(xiàn)類的共享與復(fù)用。在操作系統(tǒng)中,目錄用來組織文件,設(shè)置權(quán)限。只要在要用到包中類的時(shí)候,在該引用類的第一行加上:package(包的全路徑)即可。第五章課后習(xí)題答案1.什么是接口接口起什么作用接口與抽象類有何區(qū)別答:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。作用:接口是面向?qū)ο蟮囊粋€(gè)重要機(jī)制,使用接口可以實(shí)現(xiàn)多態(tài)繼承;接口中的所有方法都是抽象的,這些抽象方法由實(shí)現(xiàn)這一接口的不同類型來具體;接口還可以用來實(shí)現(xiàn)不同類之間的常量共享。與抽象類不同的是:接口允許在看起來不相干的類之間定義共同行為。2.試編程證明接口中的屬性都隱含為static及final,所有的方法都為public。//定義接口Shape2DinterfaceShape2D{doublePi=3.14;doublearea();}//Circle類繼承接口Shape2DpublicclassCircleimplementsShape2D{doubleradius;publicCircle(doubler){radius=r;}publicdoublearea(){returnPi*radius*radius;}}//A類〔測(cè)試接口中隱含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());}}運(yùn)行結(jié)果:3.在什么情況下,可以對(duì)父類對(duì)象的引用進(jìn)展強(qiáng)制類型轉(zhuǎn)換,使其轉(zhuǎn)化成子類對(duì)象的引用答:一個(gè)對(duì)象被塑型為父類或接口后,可以再一次被塑型回到它原來所屬的類,即轉(zhuǎn)化成原類對(duì)象的引用。4.聲明一個(gè)接口,此接口至少具有一個(gè)方法;在一個(gè)方法中聲明內(nèi)部類實(shí)現(xiàn)此接口,并返回此接口的引用。//A類接口publicinterfaceA{ voidfuck();}//B類publicclassB{ publicAfuck(){ returnnewA(){ publicvoidfuck(){ System.out.println("B類聲明實(shí)現(xiàn)A接口類并返回接口的應(yīng)用——Fuckyou!"); } };/*注意這里有分號(hào)“;〞*/ }}//test5_4publicclasstest5_4{ publicstaticvoidmain(String[]args){ newB().fuck().fuck(); }}運(yùn)行結(jié)果:5.聲明一個(gè)具有內(nèi)部類的類,此內(nèi)部類只有一個(gè)非默認(rèn)的構(gòu)造方法;聲明另外一個(gè)具有內(nèi)部類的類,此內(nèi)部類繼承第一個(gè)內(nèi)部類。//A類classA{ classClassOfA{ publicClassOfA(){ } }}//B類publicclassB{ classClassOfBextendsA.ClassOfA{ publicClassOfB(Ab){ b.super(); } }}6.聲明一個(gè)具有兩個(gè)方法的類,在第一個(gè)方法中調(diào)用第二個(gè)方法。聲明此類的一個(gè)子類,并在子類中重寫第二個(gè)方法。生成一個(gè)子類的對(duì)象,并將其塑型為基類,調(diào)用第一個(gè)方法,解釋會(huì)發(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)如何實(shí)現(xiàn)多態(tài)答:多態(tài)性是指不同類型的對(duì)象可以響應(yīng)一樣的消息。利用向上塑性技術(shù),一個(gè)父類的應(yīng)引用變量可以指向不同的子類對(duì)象;而利用動(dòng)態(tài)綁定技術(shù),可以再運(yùn)行時(shí)根據(jù)父類引用變量所指對(duì)象的世紀(jì)類型執(zhí)行相應(yīng)的子類方法,從而實(shí)現(xiàn)多態(tài)性。8.在第4章習(xí)題10的根基上,聲明測(cè)試類完成對(duì)多態(tài)性的測(cè)試?!?〕在主方法中聲明Student類的數(shù)組〔含五個(gè)元素〕〔2〕生成五個(gè)對(duì)象存入數(shù)組:其中三個(gè)Student類的對(duì)象、一個(gè)StudentXW類的對(duì)象、一個(gè)StudentBZ類的對(duì)象?!?〕將方法testScore〔〕發(fā)送給數(shù)組的每一個(gè)元素,輸出結(jié)果,并分析具體執(zhí)行的是哪一個(gè)類中的方法。//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測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3);}//6個(gè)get方法publicStringgetid(){return(id);}publicStringgetname(){return(name);}publicfloatgetscoreOfenglish(){return(scoreOfenglish);}publicfloatgetscoreOfmath(){return(scoreOfmath);}publicfloatgetscoreOfcomputer(){return(scoreOfcomputer);}publicfloatgetscoreOfsum(){return(scoreOfsum);}//5個(gè)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("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(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é)號(hào)是否相等/**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測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3+3);}//toString方法publicStringtoString(){return("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(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測(cè)評(píng)成績(jī)/平均分publicfloattestScore(){return(this.scoreOfsum/3+5);}//toString方法publicStringtoString(){return("學(xué)號(hào):"+this.id+"\n姓名:"+name+"\n英語:"+this.scoreOfenglish+"\n數(shù)學(xué):"+this.scoreOfmath+"\n計(jì)算機(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,"班長(zhǎng)") }; for(inti=0;i<5;i++) { System.out.println("學(xué)生名字:"+student[i].getname()+"\t評(píng)測(cè)成績(jī):"+newDecimalFormat("0.00").format(student[i].testScore())); }}}運(yùn)行結(jié)果:在主函數(shù)定義student數(shù)組的五個(gè)對(duì)象Studentstudent[5]={newStudent(),newStudent(),newStudent(),newStudentXW(),newStudentBZ()}中,輸出時(shí),第1、2、3個(gè)調(diào)用的是Student中的方法,第4個(gè)調(diào)用的是StudentXW的方法,第5個(gè)調(diào)用的是StudentBZ的方法。第六章課后習(xí)題答案1.將本章例6-1至6-18中出現(xiàn)的文件的構(gòu)造方法均改為使用File類對(duì)象作為參數(shù)實(shí)現(xiàn)。個(gè)人理解:File類只能對(duì)整文件性質(zhì)進(jìn)展處理,而沒法通過自己直接使用file.Read()或者是file.write()類似方法對(duì)文件內(nèi)容進(jìn)展寫或者讀取。注意:是直接;下面只提供一個(gè)例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(); }}運(yùn)行結(jié)果:〔電腦系統(tǒng)問題,沒法換行,所以一般使用BuffereWriter中newLine()實(shí)現(xiàn)換行〕2.模仿文本文件復(fù)制的例題,編寫對(duì)二進(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ù)制失敗");}}運(yùn)行前的兩個(gè)文本:lin.txt和newlin.txt〔為空〕運(yùn)行后:3.創(chuàng)立一存儲(chǔ)假設(shè)干隨機(jī)整數(shù)的文本文件,文件名、整數(shù)的個(gè)數(shù)及范圍均由鍵盤輸入。//memory存儲(chǔ)類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("輸入要存儲(chǔ)的文件名"); fileName=in.next(); System.out.println("輸入隨機(jī)數(shù)個(gè)數(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(); }}}運(yùn)行結(jié)果:naruto文件存儲(chǔ)二進(jìn)制數(shù):4.分別使用FileWriter和BufferedWriter往文件中寫入10萬個(gè)隨機(jī)數(shù),比較用時(shí)的多少。//FileWriter方法importjava.io.*;publicclassfileWriter{publicstaticvoidmain(String[]args)throwsIOException{longtime=System.currentTimeMillis();//當(dāng)前時(shí)間 FileWriterfilewriter=newFil

溫馨提示

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

評(píng)論

0/150

提交評(píng)論