【正文】
b=(b/50)*50。}if(b/20!=0){(b/20+張2角)。b=(b/20)*20。}if(b/10!=0){(b/10+張1角)。b=(b/10)*10。}if(b/5!=0){(b/5+個5分)。b=(b/5)*5。}if(b/2!=0){(b/2+個2分)。b=(b/2)*2。} if(b!=0)(b+個1分)。 }}// Keyboard類import .*。public class Keyboard{ static BufferedReader inputStream =new BufferedReader(new InputStreamReader())。 public static int getInteger(){ try{ return((().trim()).intValue())。 }catch(Exception e){ ()。 return 0。 }}public static String getString(){ try{ return(())。 }catch(IOException e){ return0。 }} public static float getFloat(){ String s=。 try{ BufferedReader in = new BufferedReader(new InputStreamReader())。 s=()。 return((s))。 } catch(IOException e) { (輸入非法!)。 return()。 }} }運行結(jié)果:?解釋拋出、捕獲的含義。答:異常又稱為例外,是特殊的運行錯誤對象,在程序中可以強制編譯器來處理程序運行中的發(fā)生的并非由程序本身所造成的錯誤;拋出異常:把生成異常對象并提交的過程稱為拋出異常; 拋出異常是java中一個程序處理動作,檢查異常時要么在方法中聲明一個異常拋出,用trycatch語句捕獲異常,并進行處理。答:java中聲明了很多異常類,每個異常類都代表了一種運行錯誤,類中包含了該運行錯誤的信息和處理錯誤的方法等內(nèi)容。每當(dāng)java程序運行過程中發(fā)生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應(yīng)時,系統(tǒng)都會產(chǎn)生一個相應(yīng)的該異常類的對象,即產(chǎn)生一個異常。一旦一個異常對象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機制來處理它,確保不會產(chǎn)生死機、死循環(huán)或其他對操作系統(tǒng)的損害,從而保證了整個程序運行的安全性。?如何使用這兩類異常?答:系統(tǒng)定義的特定情況出現(xiàn)的問題,而此時用來對可能遇到的問題進行處理。用戶定義的是自己覺得可能會出現(xiàn)問題時,需要處理的。這樣避免程序中斷或是出現(xiàn)未知錯誤。系統(tǒng)異常有兩種一種是運行時異常,一種是普通異常,普通異常要求用戶捕獲或者拋出的,不補貨或者拋出就會編譯不通過。運行時異常編譯可以通過,但是運行時才顯露出來。 ?編程實現(xiàn)一個用戶自定義異常。(1)定義mytestimport .*。public class mytest{ private static int quotient(int number,int denominator)throws DivideByZeroException{ if(denominator==0) throw new DivideByZeroException()。 return(number/denominator)。}public static void main(String args[]){ int number1=0,number2=0, result=0。 try{ (輸入第一個數(shù)字:)。 number1=(()).intValue()。 (輸入第二個數(shù)字:)。 number2=(()).intValue()。 result=quotient(number1,number2)。 } catch(NumberFormatException e){ (())。 (1)。 } (number1+/+number2+=+result)。}}(2)定義DivideByZeroExceptionpublic class DivideByZeroException extends ArithmeticException{ public DivideByZeroException(){ super(除數(shù)不能為0!)。}}(3)定義Keyboardimport .*。public class Keyboard{static BufferedReader inputStream=new BufferedReader(new InputStreamReader())。public static int getInteger(){try{ return ((().trim()).intValue())。}catch(Exception e){ ()。 return 0。 } }public static String getString(){try{ return(())。 }catch(IOException e){return 0。} }}第四章課后習(xí)題答案?為什么?答:不,子類不能直接訪問從父類中繼承的私有屬性及方法,但可以對公有及保護方法進行訪問。?答:覆蓋是運用在子類中實現(xiàn)與父類相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父類更多的事情;在子類中需要取消從父類繼承的方法。,聲明A的子類C,并且聲明B為C的一個成員,不聲明C 的構(gòu)造方法。編寫測試代碼,生成類C的實例對象,并觀察結(jié)果。//A類public class A { public A () { (輸出A類)。 }}//B類public class B { public B () { (輸出B類)。 }}//C類public class C extends A { B b = new B ()。}//測試類public class test4_3 { public static void main (String args[]) { C c = new C()。 }}運行結(jié)果:,它只有一種非默認構(gòu)造方法;聲明A的子類B,B具有默認方法及非默認方法,并在B的構(gòu)造方法中調(diào)用基類A的構(gòu)造方法。//A類public class A { public A (String lin) { (A類的非默認構(gòu)造方法 +lin)。 }}//B類public class B extends A{ public B () { super (Fuck your teacher)。 (B默認類構(gòu)造方法)。 } public B (String lin) { super (lin)。 (B類非構(gòu)造方法)。 }}//測試類public class test4_4 { public static void main (String args[]) { new B()。 ()。 new B(Fuck my teacher)。 }}運行結(jié)果:,它具有一種方法,此方法被重載三次,派生一個新類,并增加一種新的重載方法,編寫測試類驗證四種方法對于派生類驗證四種方法對于派生類都有效。//A類public class A { public void showTime () { (空重載)。 } public void showTime (int l) { (整形參數(shù)重載)。 } public void showTime (char l) { (字符參數(shù)重載)。 }}//B類public class B extends A { public void showTime (String l) { (字符串參數(shù)重載)。 }}//測試類public class test4_5 { public static void main (String args[]) { B b = new B()。 ()。 (5)。 (39。f39。)。 (林楚金)。 }},聲明一個派生類,并試圖對這個方法進行重寫,會有什么結(jié)果。//A類public class A { public final void showTime() { (類A中方法)。 } }//B類public class B extends A{ public void showTime() { (類B中方法)。 }}//測試類public class test4_6 { public static void main (String args[]) { B b = new B()。 ()。 }}運行結(jié)果:(說白了就是B中showTime()的無法覆蓋A中showTime(),被覆蓋為final,不能覆蓋。),并試圖聲明其派生類,會有什么結(jié)果。//A類public final class A {}//B類public class B extends A{}//測試類public class test4_7 { public static void main (String args[]) { B b = new B()。 }}運行結(jié)果:(說白了就是無法從A中進行繼承)?抽象類中是否一定要包括抽象方法?答:抽象類是一個不完全的類,不能使用new方法進行實例化。抽象類可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必須是抽象類。?都有哪些種用法?答:this 表示當(dāng)前類;super 表示調(diào)用父類。在定義類的時候用到,this是當(dāng)前對象的引用,super是當(dāng)前對象的父類對象的引用,一般的都是把super用在構(gòu)造函數(shù)中。:(1) 聲明Student類屬性包括學(xué)號、姓名、英語成績、數(shù)學(xué)成績、計算機成績和總成績。方法包括構(gòu)造方法、get方法、 set方法、toString方法、equals方法、pare方法(比較兩個學(xué)生的總成績,結(jié)果分為大于、小于、等于),sum方法(計算總成績)和testScore方法(計算評測成績)。注:評測成績可以取三門課成績的平均分,另外任何一門課的成績的改變都需要對總成績進行重新計算,因此,在每一個set方法中應(yīng)調(diào)用sum方法計算總成績。public class Student{String id。String name。float scoreOfenglish。float scoreOfmath。float scoreOfputer。float scoreOfsum。//構(gòu)造方法public Student(){}public Student(String aid,String aname,float ascoreOfenglish,float ascoreOfmath,float ascoreOfputer){=aid。=aname。=ascoreOfenglish。=ascoreOfmath。=ascoreOfputer。//=ascoreOfenglish+ascoreOfmath+ascoreOfputer。=sum()。}//sum方法public float sum(){return(++)。}//testScore測評成績/平均分public float testScore(){return()。}//6個get方法 public String getid(){return(id)。}public String getname(){return(name)。}public float getscoreOfenglish(){return(scoreOfenglish)。}public float getscoreOfmath(){return(scoreOfmath)。}public float getscoreOfputer(){return(scoreOfputer)。}public float getscoreOfsum(){return(scoreOfsum)。}//5個set方法public void setid(String newid){=newid。}public void setname(String newnam